From c52b2d2b629ea6ae5c1dde3c8fafe49d935d80eb Mon Sep 17 00:00:00 2001 From: Mark Reynolds Date: May 01 2015 15:00:54 +0000 Subject: Ticket 48040 - preserve the FD when disabling a listener Bug Description: Stopping the server when the listener is disabled crashes the serveri becuase we close the listener FD twice. Fix Description: When disabling a listener, pass the "preserve fd" flag to ns_job_modify(). This prevents nunc-stans from closing the FD out from underneath us. https://fedorahosted.org/389/ticket/48040 Reviewed by: rmeggins(Thanks!) --- diff --git a/ldap/servers/slapd/daemon.c b/ldap/servers/slapd/daemon.c index 221b7bb..b0b83b2 100644 --- a/ldap/servers/slapd/daemon.c +++ b/ldap/servers/slapd/daemon.c @@ -1202,7 +1202,7 @@ static void ns_disable_listener(listener_info *listener) { /* tell the event framework not to listen for new connections on this listener */ - ns_job_modify(listener->ns_job, NS_JOB_DISABLE_ONLY); + ns_job_modify(listener->ns_job, NS_JOB_DISABLE_ONLY|NS_JOB_PRESERVE_FD); /* add the listener to our list of disabled listeners */ PR_StackPush(ns_disabled_listeners, (PRStackElem *)listener); PR_AtomicIncrement(&num_disabled_listeners); @@ -3492,7 +3492,7 @@ ns_set_shutdown(struct ns_job_t *job) /* Signal all the worker threads to stop */ ns_thrpool_shutdown(ns_job_get_tp(job)); - ns_job_done(job) + ns_job_done(job); } #endif