Commit 88390159 authored by Ondřej Kuzník's avatar Ondřej Kuzník Committed by Ondřej Kuzník
Browse files

On connection shutdown, free op from the correct side

parent 37cff373
...@@ -652,11 +652,29 @@ done: ...@@ -652,11 +652,29 @@ done:
CLIENT_UNLOCK_OR_DESTROY(c); CLIENT_UNLOCK_OR_DESTROY(c);
} }
/*
* Upstream is shutting down, signal the client if necessary, but we have to
* call operation_destroy_from_upstream ourselves to detach upstream from the
* op.
*
* Only called from upstream_destroy.
*/
void void
operation_lost_upstream( Operation *op ) operation_lost_upstream( Operation *op )
{ {
Connection *c = op->o_upstream;
CONNECTION_LOCK(c);
op->o_upstream_refcnt++;
/* Matching the op reference on the connection as well */
CONNECTION_UNLOCK_INCREF(c);
operation_send_reject( op, LDAP_UNAVAILABLE, operation_send_reject( op, LDAP_UNAVAILABLE,
"connection to the remote server has been severed", 0 ); "connection to the remote server has been severed", 0 );
CONNECTION_LOCK_DECREF(c);
op->o_upstream_refcnt--;
operation_destroy_from_upstream( op );
CONNECTION_UNLOCK(c);
} }
int int
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment