]> git.sur5r.net Git - openldap/commitdiff
fix cleanup concurrency
authorPierangelo Masarati <ando@openldap.org>
Wed, 17 May 2006 01:34:46 +0000 (01:34 +0000)
committerPierangelo Masarati <ando@openldap.org>
Wed, 17 May 2006 01:34:46 +0000 (01:34 +0000)
servers/slapd/back-meta/bind.c

index 9b654c75842305f78ba2e5b3c1087a81e224f5b9..cd79a04ced6ab3e6392cafe01782ef6dadfa236e 100644 (file)
@@ -636,13 +636,21 @@ retry:;
 
 done:;
        rs->sr_err = rc;
-       if ( rc != LDAP_SUCCESS && META_BACK_ONERR_STOP( mi ) ) {
+       if ( rc != LDAP_SUCCESS ) {
+               if ( dolock ) {
+                       ldap_pvt_thread_mutex_lock( &mi->mi_conninfo.lai_mutex );
+               }
                LDAP_BACK_CONN_BINDING_CLEAR( msc );
-               LDAP_BACK_CONN_TAINTED_SET( mc );
-               meta_back_release_conn_lock( op, mc, dolock );
-               *mcp = NULL;
+               if ( META_BACK_ONERR_STOP( mi ) ) {
+                       LDAP_BACK_CONN_TAINTED_SET( mc );
+                       meta_back_release_conn_lock( op, mc, dolock );
+                       *mcp = NULL;
+               }
+               if ( dolock ) {
+                       ldap_pvt_thread_mutex_unlock( &mi->mi_conninfo.lai_mutex );
+               }
 
-               if ( sendok & LDAP_BACK_SENDERR ) {
+               if ( META_BACK_ONERR_STOP( mi ) && ( sendok & LDAP_BACK_SENDERR ) ) {
                        send_ldap_result( op, rs );
                }
        }