operation_lost_upstream( LloadOperation *op )
{
LloadConnection *c = op->o_upstream;
- CONNECTION_LOCK(c);
- op->o_res = LLOAD_OP_FAILED;
- op->o_upstream_refcnt++;
- /* Matching the op reference on the connection as well */
- CONNECTION_UNLOCK_INCREF(c);
operation_send_reject( op, LDAP_UNAVAILABLE,
"connection to the remote server has been severed", 0 );
- CONNECTION_LOCK_DECREF(c);
+ CONNECTION_LOCK(c);
op->o_upstream_refcnt--;
operation_destroy_from_upstream( op );
CONNECTION_UNLOCK(c);
{
LloadBackend *b = c->c_private;
struct event *read_event, *write_event;
- TAvlnode *root;
+ TAvlnode *root, *node;
long freed, executing;
enum sc_state state;
read_event = c->c_read_event;
write_event = c->c_write_event;
+ for ( node = tavl_end( root, TAVL_DIR_LEFT ); node;
+ node = tavl_next( node, TAVL_DIR_RIGHT ) ) {
+ LloadOperation *op = node->avl_data;
+
+ op->o_res = LLOAD_OP_FAILED;
+ op->o_upstream_refcnt++;
+ }
+
CONNECTION_UNLOCK_INCREF(c);
freed = tavl_free( root, (AVL_FREE)operation_lost_upstream );