From b039e7c1b0580f68a77b28ffbde1ed1415734035 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Kuzn=C3=ADk?= Date: Wed, 28 Mar 2018 10:16:24 +0100 Subject: [PATCH] Keep a reference around for the bind task --- servers/lloadd/daemon.c | 8 +------- servers/lloadd/upstream.c | 3 ++- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/servers/lloadd/daemon.c b/servers/lloadd/daemon.c index 3ae3dfca25..74701351f3 100644 --- a/servers/lloadd/daemon.c +++ b/servers/lloadd/daemon.c @@ -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; diff --git a/servers/lloadd/upstream.c b/servers/lloadd/upstream.c index 391b609108..77fc3fd490 100644 --- a/servers/lloadd/upstream.c +++ b/servers/lloadd/upstream.c @@ -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 ); }