From: Christopher Faulet Date: Tue, 11 Apr 2023 05:38:34 +0000 (+0200) Subject: BUG/MEDIUM: http-client: Eat output data when waiting for appctx shutdown X-Git-Tag: v2.8-dev8~197 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1901c1bf5a55eb3e1ba9a85a8463e0474d63d927;p=thirdparty%2Fhaproxy.git BUG/MEDIUM: http-client: Eat output data when waiting for appctx shutdown When the http-client applet is executed while a shut is pending, the remaining output data must always be consumed. Otherwise, this can prevent the stream to exit, leading to a spinning loop on the applet. It is 2.8-specific. No backport needed. --- diff --git a/src/http_client.c b/src/http_client.c index 29db28f028..c2dec8bbe8 100644 --- a/src/http_client.c +++ b/src/http_client.c @@ -700,9 +700,14 @@ static void httpclient_applet_io_handler(struct appctx *appctx) uint32_t sz; int ret; - if (unlikely(se_fl_test(appctx->sedesc, (SE_FL_EOS|SE_FL_ERROR|SE_FL_SHR|SE_FL_SHW)))) + if (unlikely(se_fl_test(appctx->sedesc, (SE_FL_EOS|SE_FL_ERROR|SE_FL_SHR|SE_FL_SHW)))) { + if (co_data(res)) { + htx = htx_from_buf(&res->buf); + co_htx_skip(res, htx, co_data(res)); + htx_to_buf(htx, &res->buf); + } goto out; - + } /* The IO handler could be called after the release, so we need to * check if hc is still there to run the IO handler */ if (!hc)