connection_abandon( c );
 
                /* wake write blocked operations */
+               ldap_pvt_thread_mutex_lock( &c->c_write1_mutex );
                if ( c->c_writers > 0 ) {
-                       ldap_pvt_thread_mutex_lock( &c->c_write1_mutex );
                        c->c_writers = -c->c_writers;
                        ldap_pvt_thread_cond_broadcast( &c->c_write1_cv );
                        ldap_pvt_thread_mutex_unlock( &c->c_write1_mutex );
                        }
                        ldap_pvt_thread_mutex_unlock( &c->c_write1_mutex );
                } else {
+                       ldap_pvt_thread_mutex_unlock( &c->c_write1_mutex );
                        slapd_clr_write( c->c_sd, 1 );
                }