From e4a0d40c62594b4504fd7443158731fef54e040a Mon Sep 17 00:00:00 2001 From: Christopher Faulet Date: Tue, 8 Jul 2025 08:17:49 +0200 Subject: [PATCH] BUG/MEDIUM: http-client: Ask for more room when request data cannot be xferred 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 | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/http_client.c b/src/http_client.c index 96156ecc3..7d14ed267 100644 --- a/src/http_client.c +++ b/src/http_client.c @@ -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);