]> git.sur5r.net Git - openldap/commitdiff
More for prev commit
authorHoward Chu <hyc@openldap.org>
Sun, 25 Jan 2009 01:53:32 +0000 (01:53 +0000)
committerHoward Chu <hyc@openldap.org>
Sun, 25 Jan 2009 01:53:32 +0000 (01:53 +0000)
servers/slapd/result.c

index 760113b9c7448f5acb6df353dbfda72c56387adb..22cfde86886e14c67b07492f72dc34eda0d95b20 100644 (file)
@@ -160,10 +160,11 @@ static long send_ldap_ber(
        }
 
        conn->c_writers++;
-       ldap_pvt_thread_mutex_unlock( &conn->c_write1_mutex );
 
-       if ( closing )
+       if ( closing ) {
+               ldap_pvt_thread_mutex_unlock( &conn->c_write1_mutex );
                return 0;
+       }
 
        /* write the pdu */
        while( 1 ) {
@@ -203,20 +204,18 @@ static long send_ldap_ber(
                conn->c_writewaiter = 1;
                slapd_set_write( conn->c_sd, 1 );
 
+               ldap_pvt_thread_mutex_unlock( &conn->c_write1_mutex );
                ldap_pvt_thread_mutex_unlock( &conn->c_mutex );
                ldap_pvt_thread_cond_wait( &conn->c_write2_cv, &conn->c_write2_mutex );
                conn->c_writewaiter = 0;
                ldap_pvt_thread_mutex_unlock( &conn->c_write2_mutex );
                ldap_pvt_thread_mutex_lock( &conn->c_write1_mutex );
-               closing = ( conn->c_writers < 0 );
-               ldap_pvt_thread_mutex_unlock( &conn->c_write1_mutex );
-               if ( closing ) {
+               if ( conn->c_writers < 0 ) {
                        ret = 0;
                        break;
                }
        }
 
-       ldap_pvt_thread_mutex_lock( &conn->c_write1_mutex );
        if ( conn->c_writers < 0 ) {
                conn->c_writers++;
                if ( !conn->c_writers )