From: Stephan Bosch Date: Sun, 17 Nov 2019 23:34:50 +0000 (+0100) Subject: lib-http: http-server-response - Fix management of connection idle timeout. X-Git-Tag: 2.3.11.2~264 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=277b9fbbf2c03e15281ef092eaa6dbfb2b9f02b7;p=thirdparty%2Fdovecot%2Fcore.git lib-http: http-server-response - Fix management of connection idle timeout. --- diff --git a/src/lib-http/http-server-response.c b/src/lib-http/http-server-response.c index 76c5387b44..c0d23d2514 100644 --- a/src/lib-http/http-server-response.c +++ b/src/lib-http/http-server-response.c @@ -269,6 +269,8 @@ http_server_response_flush_payload(struct http_server_response *resp) (ret = o_stream_finish(resp->payload_output)) <= 0) { if (ret < 0) http_server_connection_handle_output_error(conn); + else + http_server_connection_start_idle_timeout(conn); return ret; } @@ -308,6 +310,11 @@ int http_server_response_finish_payload_out(struct http_server_response *resp) conn); } + if (conn->request_queue_head == NULL || + (conn->request_queue_head->state != + HTTP_SERVER_REQUEST_STATE_PROCESSING)) + http_server_connection_start_idle_timeout(conn); + http_server_request_finished(resp->request); http_server_connection_unref(&conn); return 1; @@ -570,14 +577,16 @@ int http_server_response_send_more(struct http_server_response *resp) } break; case OSTREAM_SEND_ISTREAM_RESULT_WAIT_INPUT: - /* Input is blocking */ + /* Input is blocking (server needs to act; disable timeout) */ conn->output_locked = TRUE; + http_server_connection_stop_idle_timeout(conn); conn->io_resp_payload = io_add_istream(resp->payload_input, http_server_response_payload_input, resp); break; case OSTREAM_SEND_ISTREAM_RESULT_WAIT_OUTPUT: - /* Output is blocking */ + /* Output is blocking (client needs to act; enable timeout) */ conn->output_locked = TRUE; + http_server_connection_start_idle_timeout(conn); o_stream_set_flush_pending(output, TRUE); //e_debug(resp->event, "Partially sent payload"); break;