From: Ondřej Kuzník Date: Tue, 9 May 2017 15:16:12 +0000 (+0100) Subject: Retain a reference around for handle_responses X-Git-Tag: OPENLDAP_REL_ENG_2_5_1ALPHA~18^2~181 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=07b5744c2a3032836795f1a2e351e2bb10c19780;p=thirdparty%2Fopenldap.git Retain a reference around for handle_responses --- diff --git a/servers/lloadd/upstream.c b/servers/lloadd/upstream.c index bd8ca8395d..ebf4a176a7 100644 --- a/servers/lloadd/upstream.c +++ b/servers/lloadd/upstream.c @@ -423,7 +423,7 @@ handle_responses( void *ctx, void *arg ) Connection *c = arg; int responses_handled = 0; - CONNECTION_LOCK(c); + CONNECTION_LOCK_DECREF(c); for ( ; responses_handled < slap_conn_max_pdus_per_cycle; responses_handled++ ) { BerElement *ber; @@ -534,9 +534,12 @@ upstream_read_cb( evutil_socket_t s, short what, void *arg ) } return; } - event_del( c->c_read_event ); - CONNECTION_UNLOCK(c); + /* We have scheduled a call to handle_responses which takes care of + * handling further requests, just make sure the connection sticks around + * for that */ + event_del( c->c_read_event ); + CONNECTION_UNLOCK_INCREF(c); return; }