BUG/MEDIUM: hlua: Report to SC when output data are blocked on a lua socket
authorChristopher Faulet <cfaulet@haproxy.com>
Fri, 18 Jul 2025 14:09:20 +0000 (16:09 +0200)
committerChristopher Faulet <cfaulet@haproxy.com>
Tue, 26 Aug 2025 06:32:29 +0000 (08:32 +0200)
It is a fix similar to the previous one ("BUG/MEDIUM: hlua: Report to SC
when data were consumed on a lua socket"), but for the write side. The
writer must notify the cosocket it needs more space in the request buffer to
produce more data by calling sc_need_room(). Otherwise, there is nothing to
prevent to wake the cosocket applet up again and again.

This patch must be backported as far as 2.8, and maybe to 2.6 too.

(cherry picked from commit 7e96ff6b84b7d7e0805a9a4e87a0a85b6b976df8)
Signed-off-by: Willy Tarreau <w@1wt.eu>
(cherry picked from commit 839755b1d401928df89b4fd8b146a20a17e28a3d)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>

src/hlua.c

index ce40bc3..86b9012 100644 (file)
@@ -3192,6 +3192,7 @@ hlua_socket_write_yield_return:
                WILL_LJMP(luaL_error(L, "out of memory"));
        }
        xref_unlock(&socket->xref, peer);
+       sc_need_room(sc, channel_recv_max(&s->req) + 1);
        MAY_LJMP(hlua_yieldk(L, 0, 0, hlua_socket_write_yield, TICK_ETERNITY, 0));
        return 0;
 }