From: Stephan Bosch Date: Sat, 17 Feb 2018 13:44:49 +0000 (+0100) Subject: lib-http: server: Flush and check output for errors after uncorking. X-Git-Tag: 2.3.9~2272 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e3666a5d68ed3276dc770ab4bfe93e78707321cf;p=thirdparty%2Fdovecot%2Fcore.git lib-http: server: Flush and check output for errors after uncorking. Otherwise, a disconnection event may be missed. --- diff --git a/src/lib-http/http-server-response.c b/src/lib-http/http-server-response.c index 1f9c09f04e..f340ab09bb 100644 --- a/src/lib-http/http-server-response.c +++ b/src/lib-http/http-server-response.c @@ -684,8 +684,16 @@ static int http_server_response_send_real(struct http_server_response *resp, http_server_response_finish_payload_out(resp); } } - if (!resp->payload_corked) - o_stream_uncork(output); + if (ret >= 0 && !resp->payload_corked && + o_stream_uncork_flush(output) < 0) { + if (output->stream_errno != EPIPE && + output->stream_errno != ECONNRESET) { + *error_r = t_strdup_printf("flush(%s) failed: %s", + o_stream_get_name(output), + o_stream_get_error(output)); + } + ret = -1; + } o_stream_unref(&output); return ret; }