From: Olivier Houchard Date: Tue, 28 Aug 2018 12:41:31 +0000 (+0200) Subject: BUG/MEDIUM: hlua: Make sure we drain the output buffer when done. X-Git-Tag: v1.9-dev2~109 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=594c8c5015abb0d0c0a8d41fea573a2bcd63a351;p=thirdparty%2Fhaproxy.git BUG/MEDIUM: hlua: Make sure we drain the output buffer when done. In hlua_applet_tcp_fct(), drain the output buffer when the applet is done running, every time we're called. Overwise, there's a race condition, and the output buffer could be filled after the applet ran, and as it is never cleared, the stream interface will never be destroyed. This should be backported to 1.8 and 1.7. --- diff --git a/src/hlua.c b/src/hlua.c index edb4f68cac..7bbc854d0c 100644 --- a/src/hlua.c +++ b/src/hlua.c @@ -6446,8 +6446,11 @@ static void hlua_applet_tcp_fct(struct appctx *ctx) struct hlua *hlua = ctx->ctx.hlua_apptcp.hlua; /* The applet execution is already done. */ - if (ctx->ctx.hlua_apptcp.flags & APPLET_DONE) + if (ctx->ctx.hlua_apptcp.flags & APPLET_DONE) { + /* eat the whole request */ + co_skip(si_oc(si), co_data(si_oc(si))); return; + } /* If the stream is disconnect or closed, ldo nothing. */ if (unlikely(si->state == SI_ST_DIS || si->state == SI_ST_CLO))