diff --git a/servers/slapd/daemon.c b/servers/slapd/daemon.c index 63c5923a91dd76dda97b00c99b2aea02ba94a684..1f20c881a4fc6bc7e9df368a6e8f71919f9515ba 100644 --- a/servers/slapd/daemon.c +++ b/servers/slapd/daemon.c @@ -25,6 +25,7 @@ int dtblsize; static ldap_pvt_thread_t listener_tid; static volatile sig_atomic_t slapd_shutdown = 0; +static volatile sig_atomic_t slapd_listener = 0; struct slap_daemon { ldap_pvt_thread_mutex_t sd_mutex; @@ -229,6 +230,8 @@ slapd_daemon_task( int tcps = ((int *)ptr) [1]; free( ptr ); + slapd_listener=1; + connections_init(); ldap_pvt_thread_mutex_init( &slap_daemon.sd_mutex ); @@ -588,6 +591,7 @@ slapd_daemon_task( } ldap_pvt_thread_mutex_unlock( &active_threads_mutex ); + slapd_listener = 0; return NULL; } @@ -625,7 +629,10 @@ void slap_set_shutdown( int sig ) { slapd_shutdown = sig; - ldap_pvt_thread_kill( listener_tid, LDAP_SIGUSR1 ); + + if(slapd_listener) { + ldap_pvt_thread_kill( listener_tid, LDAP_SIGUSR1 ); + } /* reinstall self */ (void) SIGNAL( sig, slap_set_shutdown );