Reset connection state on abandon

This commit is contained in:
Ondřej Kuzník 2017-07-11 13:08:53 +01:00 committed by Ondřej Kuzník
parent 6140cdf6f8
commit f7cf34e69c
2 changed files with 16 additions and 0 deletions

View file

@ -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);

View file

@ -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 {