diff -u --recursive openldap-2.4.19-vanilla/servers/slapd/connection.c openldap-2.4.19/servers/slapd/connection.c --- openldap-2.4.19-vanilla/servers/slapd/connection.c 2009-11-17 19:04:26.000000000 -0500 +++ openldap-2.4.19/servers/slapd/connection.c 2009-11-17 19:09:02.000000000 -0500 @@ -783,7 +783,9 @@ { assert( connections != NULL ); assert( c != NULL ); - assert( c->c_struct_state == SLAP_C_USED ); + + if ( c->c_struct_state != SLAP_C_USED ) return; + assert( c->c_conn_state != SLAP_C_INVALID ); /* c_mutex must be locked by caller */ @@ -816,7 +818,9 @@ { assert( connections != NULL ); assert( c != NULL ); - assert( c->c_struct_state == SLAP_C_USED ); + + if ( c->c_struct_state != SLAP_C_USED ) return; + assert( c->c_conn_state == SLAP_C_CLOSING ); /* NOTE: c_mutex should be locked by caller */ diff -u --recursive openldap-2.4.19-vanilla/servers/slapd/daemon.c openldap-2.4.19/servers/slapd/daemon.c --- openldap-2.4.19-vanilla/servers/slapd/daemon.c 2009-11-17 19:04:26.000000000 -0500 +++ openldap-2.4.19/servers/slapd/daemon.c 2009-11-17 19:10:54.000000000 -0500 @@ -989,13 +989,17 @@ void slapd_set_read( ber_socket_t s, int wake ) { + int do_wake = 1; ldap_pvt_thread_mutex_lock( &slap_daemon.sd_mutex ); - assert( SLAP_SOCK_IS_ACTIVE( s )); - if (!SLAP_SOCK_IS_READ( s )) SLAP_SOCK_SET_READ( s ); - + if( SLAP_SOCK_IS_ACTIVE( s ) && !SLAP_SOCK_IS_READ( s )) { + SLAP_SOCK_SET_READ( s ); + } else { + do_wake = 0; + } ldap_pvt_thread_mutex_unlock( &slap_daemon.sd_mutex ); - WAKE_LISTENER(wake); + if ( do_wake ) + WAKE_LISTENER(wake); } time_t