From: Ondřej Kuzník Date: Tue, 9 May 2017 15:24:14 +0000 (+0100) Subject: Stop the read callback on a dead connection. X-Git-Tag: OPENLDAP_REL_ENG_2_5_1ALPHA~18^2~178 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8eb7f3fbca156c59e290bc3bd733c244abce76b6;p=thirdparty%2Fopenldap.git Stop the read callback on a dead connection. The connection might be ready to read (close) but if we can't destroy it yet, we don't want the callback to trigger all the time or process new data. --- diff --git a/servers/lloadd/client.c b/servers/lloadd/client.c index 51f7c78467..dd85b26a22 100644 --- a/servers/lloadd/client.c +++ b/servers/lloadd/client.c @@ -35,6 +35,11 @@ client_read_cb( evutil_socket_t s, short what, void *arg ) ber_len_t len; CONNECTION_LOCK(c); + if ( !c->c_live ) { + event_del( c->c_read_event ); + CONNECTION_UNLOCK(c); + return; + } Debug( LDAP_DEBUG_CONNS, "client_read_cb: " "connection %lu ready to read\n", @@ -61,6 +66,8 @@ client_read_cb( evutil_socket_t s, short what, void *arg ) c->c_currentber = NULL; ber_free( ber, 1 ); + + event_del( c->c_read_event ); CLIENT_DESTROY(c); return; } diff --git a/servers/lloadd/upstream.c b/servers/lloadd/upstream.c index 6a30e82c1e..54f157f60d 100644 --- a/servers/lloadd/upstream.c +++ b/servers/lloadd/upstream.c @@ -488,6 +488,11 @@ upstream_read_cb( evutil_socket_t s, short what, void *arg ) ber_len_t len; CONNECTION_LOCK(c); + if ( !c->c_live ) { + event_del( c->c_read_event ); + CONNECTION_UNLOCK(c); + return; + } Debug( LDAP_DEBUG_CONNS, "upstream_read_cb: " "connection %lu ready to read\n", c->c_connid ); @@ -513,6 +518,8 @@ upstream_read_cb( evutil_socket_t s, short what, void *arg ) c->c_currentber = NULL; ber_free( ber, 1 ); + + event_del( c->c_read_event ); UPSTREAM_DESTROY(c); return; }