Le 29/06/2026 à 9:27 AM, Yaacov Akiba Slama a écrit :
Hi,
On keep-alive connections, the frontend SC's SC_FL_ERROR flag from a
previous request's processing can persist into the next request. When
that next request runs http-req rules containing a yielding action (e.g.
a Lua httpclient call), http_req_get_intercept_rule() sees the stale
flag and sets ACT_OPT_FINAL_EARLY on the first call, preventing the
yield and silently aborting the action.
Commit 84b952515 (mux-fcgi drain fix) makes this more likely by
accelerating stream cleanup, which triggers SC_FL_ERROR propagation on
the frontend SC during the response phase.
Fix by only checking these flags on resume (s->current_rule is set), not
on the first call where the flags are stale from a previous request.
--yas
--- a/src/http_ana.c
+++ b/src/http_ana.c
@@ -2834,7 +2834,7 @@ static enum rule_result http_req_get_intercept_rule(...)
enum rule_result rule_ret = HTTP_RULE_RES_CONT;
int act_opts = 0;
- if ((s->scf->flags & SC_FL_ERROR) ||
+ if (s->current_rule &&
+ ((s->scf->flags & SC_FL_ERROR) ||
((s->scf->flags & SC_FL_EOS) && proxy_abrt_close_def(px, 1))))
act_opts |= ACT_OPT_FINAL | ACT_OPT_FINAL_EARLY;
[Forgot to reply to the ML]
Hi,
I'm sorry, I missed your patch. It could be good to explain a bit your issue
because the description is quite surprising. Streams, and frontend and backend
SCs, are not reused between two requests on the same connection. For each
request, a new stream is created, and with it a new couple de SCs.
In addition, I don't understand how the draining fix in the FCGI multiplexer fix
can have a link with the issue. It could also be good to elaborate.
--
Christopher Faulet