From 594c8c5015abb0d0c0a8d41fea573a2bcd63a351 Mon Sep 17 00:00:00 2001 From: Olivier Houchard Date: Tue, 28 Aug 2018 14:41:31 +0200 Subject: [PATCH] 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. --- src/hlua.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/hlua.c b/src/hlua.c index edb4f68ca..7bbc854d0 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))