From c38c1d02c5b67823d3d157eb2e5ce6df42994aba Mon Sep 17 00:00:00 2001 From: Christopher Faulet Date: Fri, 5 Jan 2024 16:59:06 +0100 Subject: [PATCH] BUG/MEDIUM: stconn: Set fsb date if zero-copy forwarding is blocked during nego During the zero-copy forwarding, if the consumer side reports it is blocked, it means it is blocked on send. At the stream-connector level, the event must be reported to be sure to set/update the fsb date. Otherwise, write timeouts cannot be properly reported. If this happens when no other timeout is armed, this freezes the stream. This patch must be backported to 2.9. (cherry picked from commit 7cc41514226a2072b538c859cd83dc01de0aeb3f) Signed-off-by: Willy Tarreau --- include/haproxy/stconn.h | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/include/haproxy/stconn.h b/include/haproxy/stconn.h index afab784..7869fa3 100644 --- a/include/haproxy/stconn.h +++ b/include/haproxy/stconn.h @@ -518,11 +518,15 @@ static inline size_t se_nego_ff(struct sedesc *se, struct buffer *input, size_t } ret = mux->nego_fastfwd(se->sc, input, count, may_splice); - if ((se->iobuf.flags & IOBUF_FL_FF_BLOCKED) && !(se->sc->wait_event.events & SUB_RETRY_SEND)) { - /* The SC must be subs for send to be notify when some - * space is made - */ - mux->subscribe(se->sc, SUB_RETRY_SEND, &se->sc->wait_event); + if (se->iobuf.flags & IOBUF_FL_FF_BLOCKED) { + sc_ep_report_blocked_send(se->sc, 0); + + if (!(se->sc->wait_event.events & SUB_RETRY_SEND)) { + /* The SC must be subs for send to be notify when some + * space is made + */ + mux->subscribe(se->sc, SUB_RETRY_SEND, &se->sc->wait_event); + } } goto end; } -- 1.7.10.4