From 8eb7f3fbca156c59e290bc3bd733c244abce76b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Kuzn=C3=ADk?= Date: Tue, 9 May 2017 16:24:14 +0100 Subject: [PATCH] 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. --- servers/lloadd/client.c | 7 +++++++ servers/lloadd/upstream.c | 7 +++++++ 2 files changed, 14 insertions(+) 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; }