assert(session->outgoing == false);
if (session->tasks.len > 0) {
uv_timer_again(timer);
- } else {
+ } else if (!session->closing) {
uv_timer_stop(timer);
worker_session_close(session);
}
(void) qr_task_send(task, handle,
(struct sockaddr *)&ctx->source.addr,
ctx->req.answer);
+ if (handle->type == UV_TCP) {
+ /* Don't try to close source session at least
+ * retry_interval_for_timeout_timer milliseconds */
+ uv_timer_again(&ctx->source.session->timeout);
+ }
} else {
(void) qr_task_on_send(task, NULL, kr_error(EIO));
}