From ee288cfc2dd86ee0b9180b2f1a2a1cb68c677aec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Kuzn=C3=ADk?= Date: Thu, 18 May 2017 16:10:11 +0100 Subject: [PATCH] Fix refcounting for all code paths --- servers/lloadd/upstream.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/servers/lloadd/upstream.c b/servers/lloadd/upstream.c index 3e72a55427..6c82c1fe2d 100644 --- a/servers/lloadd/upstream.c +++ b/servers/lloadd/upstream.c @@ -109,12 +109,12 @@ handle_bind_response( Operation *op, BerElement *ber ) "received response for bind request by client %lu, result=%d\n", op->o_client_connid, result ); + CONNECTION_LOCK(c); switch ( result ) { case LDAP_SASL_BIND_IN_PROGRESS: break; case LDAP_SUCCESS: default: { - CONNECTION_LOCK(c); c->c_state = SLAP_C_READY; if ( result != LDAP_SUCCESS ) { ber_memfree( c->c_auth.bv_val ); @@ -124,24 +124,19 @@ handle_bind_response( Operation *op, BerElement *ber ) ber_memfree( c->c_sasl_bind_mech.bv_val ); BER_BVZERO( &c->c_sasl_bind_mech ); } - if ( rc ) { - CONNECTION_UNLOCK_INCREF(c); - } else { - CONNECTION_UNLOCK(c); - } break; } } done: if ( rc ) { - CONNECTION_LOCK_DECREF(c); operation_destroy_from_client( op ); - CLIENT_UNLOCK_OR_DESTROY(c); + CONNECTION_UNLOCK(c); ber_free( ber, 1 ); return rc; } + CONNECTION_UNLOCK(c); return forward_final_response( op, ber ); }