From 9ebe5acb625f8606fcb59ca5c74fcae502b586b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Kuzn=C3=ADk?= Date: Tue, 9 May 2017 18:02:28 +0100 Subject: [PATCH] Clean up events properly --- servers/lloadd/client.c | 8 ++++---- servers/lloadd/upstream.c | 20 ++++++++++++++++---- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/servers/lloadd/client.c b/servers/lloadd/client.c index dd85b26a22..6a5801f34d 100644 --- a/servers/lloadd/client.c +++ b/servers/lloadd/client.c @@ -278,12 +278,12 @@ client_init( return c; fail: if ( c->c_write_event ) { - event_del( c->c_write_event ); event_free( c->c_write_event ); + c->c_write_event = NULL; } if ( c->c_read_event ) { - event_del( c->c_read_event ); event_free( c->c_read_event ); + c->c_read_event = NULL; } c->c_state = SLAP_C_INVALID; connection_destroy( c ); @@ -298,13 +298,13 @@ client_destroy( Connection *c ) c->c_connid ); if ( c->c_read_event ) { - event_del( c->c_read_event ); event_free( c->c_read_event ); + c->c_read_event = NULL; } if ( c->c_write_event ) { - event_del( c->c_write_event ); event_free( c->c_write_event ); + c->c_write_event = NULL; } c->c_state = SLAP_C_INVALID; diff --git a/servers/lloadd/upstream.c b/servers/lloadd/upstream.c index 54f157f60d..b36051f69e 100644 --- a/servers/lloadd/upstream.c +++ b/servers/lloadd/upstream.c @@ -870,11 +870,13 @@ upstream_destroy( Connection *c ) * event_del will block if the event is currently executing its callback, * that callback might be waiting to lock c->c_mutex */ - event_del( read_event ); - event_free( read_event ); + if ( read_event ) { + event_del( read_event ); + } - event_del( write_event ); - event_free( write_event ); + if ( write_event ) { + event_del( write_event ); + } ldap_pvt_thread_mutex_lock( &b->b_mutex ); LDAP_LIST_REMOVE( c, c_next ); @@ -889,6 +891,16 @@ upstream_destroy( Connection *c ) CONNECTION_LOCK_DECREF(c); + if ( c->c_read_event ) { + event_free( c->c_read_event ); + c->c_read_event = NULL; + } + + if ( c->c_write_event ) { + event_free( c->c_write_event ); + c->c_write_event = NULL; + } + /* * If we attempted to destroy any operations, we might have lent a new * refcnt token for a thread that raced us to that, let them call us again