struct worker_ctx *worker = get_worker();
uv_stream_t *handle = req->handle;
struct session *session = handle->data;
-
union inaddr *peer = &session->peer;
- uv_timer_stop(&session->timeout);
if (status == UV_ECANCELED) {
worker_del_tcp_waiting(worker, &peer->ip);
return;
}
+ uv_timer_stop(&session->timeout);
+
if (status != 0) {
worker_del_tcp_waiting(worker, &peer->ip);
while (session->waiting.len > 0) {
struct qr_task *task = session->waiting.at[0];
session_del_tasks(session, task);
array_del(session->waiting, 0);
+ ioreq_kill_pending(task);
+ assert(task->pending_count == 0);
qr_task_finalize(task, KR_STATE_FAIL);
qr_task_unref(task);
}
struct qr_task *task = session->waiting.at[0];
session_del_tasks(session, task);
array_del(session->waiting, 0);
+ ioreq_kill_pending(task);
+ assert(task->pending_count == 0);
qr_task_finalize(task, KR_STATE_FAIL);
qr_task_unref(task);
}
worker->stats.timeout += 1;
array_del(session->waiting, 0);
session_del_tasks(session, task);
+ ioreq_kill_pending(task);
+ assert(task->pending_count == 0);
qr_task_finalize(task, KR_STATE_FAIL);
qr_task_unref(task);
}
worker->stats.timeout += 1;
assert(task->refs > 1);
array_del(session->tasks, 0);
+ ioreq_kill_pending(task);
+ assert(task->pending_count == 0);
qr_task_finalize(task, KR_STATE_FAIL);
qr_task_unref(task);
}
subreq_finalize(task, packet_source, packet);
return qr_task_finalize(task, KR_STATE_FAIL);
}
+ assert(task->pending_count == 0);
+ task->pending[task->pending_count] = session->handle;
+ task->pending_count += 1;
} else if ((session = worker_find_tcp_connected(ctx->worker, addr)) != NULL) {
/* Connection has been already established */
assert(session->outgoing);
return qr_task_finalize(task, KR_STATE_FAIL);
}
}
+ assert(task->pending_count == 0);
task->pending[task->pending_count] = session->handle;
task->pending_count += 1;
} else {
session->buffering = NULL;
session->msg_hdr_idx = 0;
if (session->outgoing) {
+ assert ((task->pending_count == 1) && (task->pending[0] == session->handle));
+ task->pending_count = 0;
session_del_tasks(session, task);
}
/* Parse the packet and start resolving complete query */