]> git.sur5r.net Git - openldap/commitdiff
Move WAKE_LISTENER call behind &connection_mutex to eliminate
authorKurt Zeilenga <kurt@openldap.org>
Fri, 4 Jun 1999 01:05:29 +0000 (01:05 +0000)
committerKurt Zeilenga <kurt@openldap.org>
Fri, 4 Jun 1999 01:05:29 +0000 (01:05 +0000)
race condition on file descriptor sets.

servers/slapd/daemon.c

index 86410a54fc53b58572066581d8db576f411aa8e2..a0f6a0b11bb1ed0ea56d67f48b264fb2274e17a0 100644 (file)
@@ -114,46 +114,44 @@ void slapd_remove(int s) {
 
 void slapd_clr_write(int s, int wake) {
        ldap_pvt_thread_mutex_lock( &slap_daemon.sd_mutex );
+       WAKE_LISTENER;
 
        assert( FD_ISSET( (unsigned) s, &slap_daemon.sd_actives) );
        FD_CLR( (unsigned) s, &slap_daemon.sd_writers );
 
        ldap_pvt_thread_mutex_unlock( &slap_daemon.sd_mutex );
-
-       WAKE_LISTENER;
 }
 
 void slapd_set_write(int s, int wake) {
        ldap_pvt_thread_mutex_lock( &slap_daemon.sd_mutex );
+    WAKE_LISTENER;
+
 
        assert( FD_ISSET( s, &slap_daemon.sd_actives) );
        FD_SET( (unsigned) s, &slap_daemon.sd_writers );
 
        ldap_pvt_thread_mutex_unlock( &slap_daemon.sd_mutex );
-
-    WAKE_LISTENER;
 }
 
 void slapd_clr_read(int s, int wake) {
        ldap_pvt_thread_mutex_lock( &slap_daemon.sd_mutex );
+    WAKE_LISTENER;
 
        assert( FD_ISSET( s, &slap_daemon.sd_actives) );
        FD_CLR( (unsigned) s, &slap_daemon.sd_readers );
 
        ldap_pvt_thread_mutex_unlock( &slap_daemon.sd_mutex );
 
-    WAKE_LISTENER;
 }
 
 void slapd_set_read(int s, int wake) {
        ldap_pvt_thread_mutex_lock( &slap_daemon.sd_mutex );
+    WAKE_LISTENER;
 
        assert( FD_ISSET( s, &slap_daemon.sd_actives) );
        FD_SET( (unsigned) s, &slap_daemon.sd_readers );
 
        ldap_pvt_thread_mutex_unlock( &slap_daemon.sd_mutex );
-
-    WAKE_LISTENER;
 }
 
 static void slapd_close(int s) {