diff --git a/servers/slapd/connection.c b/servers/slapd/connection.c index e1f651bd2b..43faf736a5 100644 --- a/servers/slapd/connection.c +++ b/servers/slapd/connection.c @@ -783,7 +783,9 @@ void connection_closing( Connection *c, const char *why ) { 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 @@ connection_close( Connection *c ) { 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 --git a/servers/slapd/daemon.c b/servers/slapd/daemon.c index 8027f2a788..1acc659712 100644 --- a/servers/slapd/daemon.c +++ b/servers/slapd/daemon.c @@ -989,13 +989,17 @@ slapd_clr_read( ber_socket_t s, int wake ) 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