]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MEDIUM: http-client: Ask for more room when request data cannot be xferred
authorChristopher Faulet <cfaulet@haproxy.com>
Tue, 8 Jul 2025 06:17:49 +0000 (08:17 +0200)
committerChristopher Faulet <cfaulet@haproxy.com>
Wed, 9 Jul 2025 14:27:24 +0000 (16:27 +0200)
When the request payload cannot be xferred to the channel because its buffer
is full, we must request for more room by calling sc_need_room(). It is
important to be sure the httpclient applet will not be woken up in loop to
push more data while it is not possible.

It is only an issue with large POSTs, when the payload is streamed.

This patch must be backported as far as 2.6. Note that on 2.6,
sc_need_room() only takes one argument.

src/http_client.c

index 96156ecc3645194675c91f271f773f4a0e096801..7d14ed267f061170535199da1ec67dbb665d9f2d 100644 (file)
@@ -595,6 +595,10 @@ void httpclient_applet_io_handler(struct appctx *appctx)
                                                        size_t data = htx->data;
 
                                                        ret = htx_xfer_blks(htx, hc_htx, htx_used_space(hc_htx), HTX_BLK_UNUSED);
+                                                       if (!ret.ret) {
+                                                               sc_need_room(sc, channel_htx_recv_max(req, htx) + 1);
+                                                               goto out;
+                                                       }
                                                        data = htx->data - data;
                                                        channel_add_input(req, data);