diff --git a/servers/slapd/connection.c b/servers/slapd/connection.c index 5f88d1dc33..aec09ae690 100644 --- a/servers/slapd/connection.c +++ b/servers/slapd/connection.c @@ -553,9 +553,20 @@ int connection_read(int s) Debug( LDAP_DEBUG_ANY, "connection_read(%d): no connection!\n", s, 0, 0 ); + ldap_pvt_thread_mutex_unlock( &connections_mutex ); return -1; } + if( c->c_conn_state == SLAP_C_CLOSING ) { + Debug( LDAP_DEBUG_TRACE, + "connection_read(%d): closing, ignoring input for id=%ld\n", + s, c->c_connid, 0 ); + + connection_return( c ); + ldap_pvt_thread_mutex_unlock( &connections_mutex ); + return 0; + } + Debug( LDAP_DEBUG_TRACE, "connection_read(%d): checking for input on id=%ld\n", s, c->c_connid, 0 ); @@ -755,6 +766,7 @@ int connection_write(int s) Debug( LDAP_DEBUG_ANY, "connection_write(%d): no connection!\n", s, 0, 0 ); + ldap_pvt_thread_mutex_unlock( &connections_mutex ); return -1; }