]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/daemon.c
Another concurrency typo.
[openldap] / servers / slapd / daemon.c
index 4e2ac8756c6cbb91c251c4bd0840687f28e1dcff..684a9d235d1f76cdce045b30fc11c063a19edd46 100644 (file)
@@ -358,9 +358,9 @@ slapd_daemon(
                                    "signaling write waiter on %d\n", i, 0, 0 );
 
                                ldap_pvt_thread_mutex_lock( &active_threads_mutex );
-                               ldap_pvt_thread_cond_signal( &c[i].c_wcv );
-                               c[i].c_writewaiter = 0;
                                active_threads++;
+                               c[i].c_writewaiter = 0;
+                               ldap_pvt_thread_cond_signal( &c[i].c_wcv );
                                ldap_pvt_thread_mutex_unlock( &active_threads_mutex );
                        }
 
@@ -375,11 +375,15 @@ slapd_daemon(
                ldap_pvt_thread_yield();
        }
 
+       Debug( LDAP_DEBUG_TRACE,
+           "slapd shutdown: shutdown initiated.\n",
+           0, 0, 0 );
+
        close( tcps );
 
        ldap_pvt_thread_mutex_lock( &active_threads_mutex );
        Debug( LDAP_DEBUG_ANY,
-           "slapd shutting down - waiting for %d threads to terminate\n",
+           "slapd shutdown: waiting for %d threads to terminate\n",
            active_threads, 0, 0 );
        while ( active_threads > 0 ) {
                ldap_pvt_thread_cond_wait(&active_threads_cond, &active_threads_mutex);
@@ -388,10 +392,16 @@ slapd_daemon(
 
        /* let backends do whatever cleanup they need to do */
        Debug( LDAP_DEBUG_TRACE,
-           "slapd shutting down - waiting for backends to close down\n", 0, 0,
-           0 );
+           "slapd shutdown: closing each backends.\n",
+           0, 0, 0 );
        be_close();
-       Debug( LDAP_DEBUG_ANY, "slapd stopping\n", 0, 0, 0 );
+
+       Debug( LDAP_DEBUG_TRACE,
+           "slapd shutdown: shutdown backends.\n",
+           0, 0, 0 );
+       be_shutdown();
+       Debug( LDAP_DEBUG_ANY, "slapd: stopped\n", 0, 0, 0 );
+
        return NULL;
 }