From 0b31c94a8bd11bde21562c5eb1c1a2e372c38546 Mon Sep 17 00:00:00 2001
From: Quanah Gibson-Mount <quanah@openldap.org>
Date: Tue, 17 Nov 2009 18:08:40 +0000
Subject: [PATCH] ITS#6361

---
 CHANGES                    |  1 +
 servers/slapd/connection.c |  8 ++++++--
 servers/slapd/daemon.c     | 12 ++++++++----
 3 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/CHANGES b/CHANGES
index c4e403b509..25f15f52bc 100644
--- a/CHANGES
+++ b/CHANGES
@@ -8,6 +8,7 @@ OpenLDAP 2.4.20 Engineering
 	Fixed libldap uninitialized return value (ITS#6355)
 	Fixed liblutil constant (ITS#5909)
 	Added slapd handling of hex server IDs (ITS#6297)
+	Fixed slapd asserts in minimal environment (ITS#6361)
 	Fixed slapd configArgs initialization (ITS#6363)
 	Fixed slapd debug handling of LDAP_DEBUG_ANY (ITS#6324)
 	Fixed slapd inclusion of ac/unistd.h (ITS#6342)
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
-- 
GitLab