]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-http: client - Don't unlock connection output before request payload is fully...
authorStephan Bosch <stephan.bosch@open-xchange.com>
Wed, 25 Jan 2023 20:47:26 +0000 (21:47 +0100)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Mon, 30 Jan 2023 19:48:46 +0000 (19:48 +0000)
src/lib-http/http-client-request.c

index b25f768b07cd0df12b3936977c36408401677d8f..5ec4a8ef688ca2384580dfddac45d77f409035fa 100644 (file)
@@ -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);