]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/connection.c
ITS#4088 force cursors to use same locker
[openldap] / servers / slapd / connection.c
index 718744b95c635976ad4f8bf5aeddbebbc87529f1..89de750871e83e2aba75a4f7e428cbdee03ee68a 100644 (file)
@@ -1362,9 +1362,10 @@ int connection_client_setup(
        c = connection_get( s );
        c->c_clientfunc = func;
        c->c_clientarg = arg;
-       connection_return( c );
+
        slapd_add_internal( s, 0 );
        slapd_set_read( s, 1 );
+       connection_return( c );
        return 0;
 }
 
@@ -1395,8 +1396,8 @@ void connection_client_stop(
                ber_sockbuf_ctrl( c->c_sb, LBER_SB_OPT_SET_MAX_INCOMING, &max );
        }
 
-       connection_return( c );
        slapd_remove( s, 0, 1 );
+       connection_return( c );
 }
 
 #ifdef SLAP_LIGHTWEIGHT_DISPATCHER
@@ -1484,12 +1485,12 @@ int connection_read(ber_socket_t s)
                Debug( LDAP_DEBUG_TRACE,
                        "connection_read(%d): closing, ignoring input for id=%lu\n",
                        s, c->c_connid, 0 );
-               connection_return( c );
-               ldap_pvt_thread_mutex_unlock( MCA_GET_CONN_MUTEX(s) );
 
 #ifdef SLAP_LIGHTWEIGHT_DISPATCHER
-               slapd_set_read( s, 1);
+               slapd_set_read( s, 1 );
 #endif
+               connection_return( c );
+               ldap_pvt_thread_mutex_unlock( MCA_GET_CONN_MUTEX(s) );
                return 0;
        }
 
@@ -1516,7 +1517,7 @@ int connection_read(ber_socket_t s)
                rc = ldap_pvt_tls_accept( c->c_sb, slap_tls_ctx );
                if ( rc < 0 ) {
                        Debug( LDAP_DEBUG_TRACE,
-                               "connection_read(%d): TLS accept error "
+                               "connection_read(%d): TLS accept failure "
                                "error=%d id=%lu, closing\n",
                                s, rc, c->c_connid );
 
@@ -1544,6 +1545,9 @@ int connection_read(ber_socket_t s)
 #endif
 
                        connection_close( c );
+                       connection_return( c );
+                       ldap_pvt_thread_mutex_unlock( MCA_GET_CONN_MUTEX(s) );
+                       return 0;
 
                } else if ( rc == 0 ) {
                        void *ssl;
@@ -1576,12 +1580,12 @@ int connection_read(ber_socket_t s)
                if( rc != 0 ||
                        !ber_sockbuf_ctrl( c->c_sb, LBER_SB_OPT_DATA_READY, NULL ) )
                {
-                       connection_return( c );
-                       ldap_pvt_thread_mutex_unlock( MCA_GET_CONN_MUTEX(s) );
-
 #ifdef SLAP_LIGHTWEIGHT_DISPATCHER
                        slapd_set_read( s, 1 );
 #endif
+
+                       connection_return( c );
+                       ldap_pvt_thread_mutex_unlock( MCA_GET_CONN_MUTEX(s) );
                        return 0;
                }
        }
@@ -1591,12 +1595,12 @@ int connection_read(ber_socket_t s)
        if ( c->c_sasl_layers ) {
                /* If previous layer is not removed yet, give up for now */
                if ( !c->c_sasl_sockctx ) {
-                       connection_return( c );
-                       ldap_pvt_thread_mutex_unlock( MCA_GET_CONN_MUTEX(s) );
-
 #ifdef SLAP_LIGHTWEIGHT_DISPATCHER
                        slapd_set_read( s, 1 );
 #endif
+
+                       connection_return( c );
+                       ldap_pvt_thread_mutex_unlock( MCA_GET_CONN_MUTEX(s) );
                        return 0;
                }
 
@@ -1610,11 +1614,6 @@ int connection_read(ber_socket_t s)
                                s, rc, c->c_connid );
 
                        /* connections_mutex and c_mutex are locked */
-
-#ifdef SLAP_LIGHTWEIGHT_DISPATCHER
-                       slapd_set_read( s, 1 );
-#endif
-
                        connection_closing( c, "SASL layer install failure" );
                        connection_close( c );
                        connection_return( c );
@@ -2121,10 +2120,9 @@ int connection_write(ber_socket_t s)
 
                break;
        }
-       connection_return( c );
 
+       connection_return( c );
        ldap_pvt_thread_mutex_unlock( MCA_GET_CONN_MUTEX(s) );
-
        return 0;
 }