]> git.ipfire.org Git - thirdparty/openldap.git/commitdiff
Keep a reference around for the bind task
authorOndřej Kuzník <okuznik@symas.com>
Wed, 28 Mar 2018 09:16:24 +0000 (10:16 +0100)
committerOndřej Kuzník <okuznik@symas.com>
Tue, 17 Nov 2020 17:58:15 +0000 (17:58 +0000)
servers/lloadd/daemon.c
servers/lloadd/upstream.c

index 3ae3dfca253c82d257f68bb5c6bf9346c7cf85d3..74701351f32026e0aa7cd8e28e0dc2776ea5c2f5 100644 (file)
@@ -1432,13 +1432,7 @@ backend_conn_cb( ldap_pvt_thread_start_t *start, void *startarg, void *arg )
     LloadBackend *b = arg;
 
     if ( b == NULL || c->c_private == b ) {
-        if ( start == upstream_bind ) {
-            /* FIXME: is upstream_bind safe without a reference of its own? */
-            CONNECTION_LOCK(c);
-        } else {
-            CONNECTION_LOCK_DECREF(c);
-        }
-        CONNECTION_DESTROY(c);
+        CONNECTION_LOCK_DESTROY(c);
         return 1;
     }
     return 0;
index 391b609108924036d6fdcace7168f5b78cab8f84..77fc3fd490d89210c300c21c2b0efddfcce16afa 100644 (file)
@@ -361,7 +361,7 @@ upstream_bind( void *ctx, void *arg )
     BerElement *ber;
     ber_int_t msgid;
 
-    CONNECTION_LOCK(c);
+    CONNECTION_LOCK_DECREF(c);
     c->c_pdu_cb = upstream_bind_cb;
     CONNECTION_UNLOCK_INCREF(c);
 
@@ -460,6 +460,7 @@ upstream_finish( LloadConnection *c )
         b->b_last_conn = c;
     } else {
         rc = 1;
+        c->c_refcnt++;
         ldap_pvt_thread_pool_submit( &connection_pool, upstream_bind, c );
     }