From f7cf34e69cda74d19a0d15da4d5ab5c7e840016e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Kuzn=C3=ADk?= Date: Tue, 11 Jul 2017 13:08:53 +0100 Subject: [PATCH] Reset connection state on abandon --- servers/lloadd/operation.c | 13 +++++++++++++ servers/lloadd/upstream.c | 3 +++ 2 files changed, 16 insertions(+) diff --git a/servers/lloadd/operation.c b/servers/lloadd/operation.c index f5a9b6a015..6621b4845d 100644 --- a/servers/lloadd/operation.c +++ b/servers/lloadd/operation.c @@ -541,6 +541,9 @@ operation_abandon( Operation *op ) /* The operation has already been abandoned or finished */ goto unlock; } + if ( c->c_state == SLAP_C_BINDING ) { + c->c_state = SLAP_C_READY; + } c->c_n_ops_executing--; b = (Backend *)c->c_private; CONNECTION_UNLOCK_INCREF(c); @@ -586,6 +589,9 @@ done: /* Caller should hold a reference on client */ CONNECTION_LOCK(c); + if ( c->c_state == SLAP_C_BINDING ) { + c->c_state = SLAP_C_READY; + } op->o_client_refcnt--; operation_destroy_from_client( op ); CONNECTION_UNLOCK(c); @@ -623,6 +629,13 @@ request_abandon( Connection *c, Operation *op ) c->c_connid, op->o_client_msgid, slap_msgtype2str( request->o_tag ), needle.o_client_msgid ); + if ( c->c_state == SLAP_C_BINDING ) { + /* We have found the request and we are binding, it must be a bind + * request */ + assert( request->o_tag == LDAP_REQ_BIND ); + c->c_state = SLAP_C_READY; + } + CONNECTION_UNLOCK_INCREF(c); operation_abandon( request ); CONNECTION_LOCK_DECREF(c); diff --git a/servers/lloadd/upstream.c b/servers/lloadd/upstream.c index c6d8bc2c7a..70b0f0a7ce 100644 --- a/servers/lloadd/upstream.c +++ b/servers/lloadd/upstream.c @@ -443,6 +443,9 @@ handle_one_response( Connection *c ) CONNECTION_LOCK_DECREF(c); op->o_upstream_refcnt--; if ( !client || !op->o_upstream_refcnt ) { + if ( c->c_state == SLAP_C_BINDING ) { + c->c_state = SLAP_C_READY; + } operation_destroy_from_upstream( op ); } } else {