diff --git a/servers/slapd/connection.c b/servers/slapd/connection.c
index 2441e6a7c9a639bce7ccd2bd88653ab9f52c5ba6..2f9ab790610e39ae41a45572783d1e1dfb773728 100644
--- a/servers/slapd/connection.c
+++ b/servers/slapd/connection.c
@@ -767,7 +767,12 @@ void connection_closing( Connection *c )
 
 		/* wake write blocked operations */
 		slapd_clr_write( sd, 1 );
-		ldap_pvt_thread_cond_signal( &c->c_write_cv );
+		if ( c->c_writewaiter ) {
+			ldap_pvt_thread_cond_signal( &c->c_write_cv );
+			ldap_pvt_thread_mutex_unlock( &c->c_mutex );
+			ldap_pvt_thread_yield();
+			ldap_pvt_thread_mutex_lock( &c->c_mutex );
+		}
 	}
 }