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
