From: Stephan Bosch Date: Wed, 25 Jan 2023 20:47:26 +0000 (+0100) Subject: lib-http: client - Don't unlock connection output before request payload is fully... X-Git-Tag: 2.4.0~3033 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=49eabe73a1fb9afd7cc9b12834ab2fe65fac8f0e;p=thirdparty%2Fdovecot%2Fcore.git lib-http: client - Don't unlock connection output before request payload is fully sent --- diff --git a/src/lib-http/http-client-request.c b/src/lib-http/http-client-request.c index b25f768b07..5ec4a8ef68 100644 --- a/src/lib-http/http-client-request.c +++ b/src/lib-http/http-client-request.c @@ -1040,14 +1040,14 @@ static int http_client_request_flush_payload(struct http_client_request *req) struct http_client_connection *conn = req->conn; int ret; - if (req->payload_output != conn->conn.output && - (ret = o_stream_finish(req->payload_output)) <= 0) { - if (ret < 0) - http_client_connection_handle_output_error(conn); - return ret; - } + if (req->payload_output == conn->conn.output) + ret = o_stream_flush(req->payload_output); + else + ret = o_stream_finish(req->payload_output); - return 1; + if (ret < 0) + http_client_connection_handle_output_error(conn); + return ret; } static int @@ -1067,6 +1067,7 @@ http_client_request_finish_payload_out(struct http_client_request *req) if (ret == 0) { e_debug(req->event, "Not quite finished sending payload"); + conn->output_locked = TRUE; return 0; } o_stream_unref(&req->payload_output);