From 4fd656e311d7817e03e0f9ddca4c6635ccd4476f Mon Sep 17 00:00:00 2001 From: Christopher Faulet Date: Thu, 18 Apr 2024 08:58:55 +0200 Subject: [PATCH] BUG/MEDIUM: spoe: Always retry when an applet fails to send a frame This bug is related to the previous one ("BUG/MEDIUM: spoe: Always retry when an applet fails to send a frame"). applet_putblk() function retruns -1 on error and it should always be interpreted as a missing of room in the buffer. However, on the spoe, this was processed as an I/O error. This patch must be backported as far as 2.8. --- src/flt_spoe.c | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/src/flt_spoe.c b/src/flt_spoe.c index f646581efd..3fc058c283 100644 --- a/src/flt_spoe.c +++ b/src/flt_spoe.c @@ -1131,7 +1131,6 @@ spoe_handle_healthcheck_response(char *frame, size_t size, char *err, int errlen static int spoe_send_frame(struct appctx *appctx, char *buf, size_t framesz) { - struct stconn *sc = appctx_sc(appctx); int ret; uint32_t netint; @@ -1140,15 +1139,8 @@ spoe_send_frame(struct appctx *appctx, char *buf, size_t framesz) netint = htonl(framesz); memcpy(buf, (char *)&netint, 4); ret = applet_putblk(appctx, buf, framesz+4); - if (ret <= 0) { - if (ret == -3 && b_is_null(&sc_ic(sc)->buf)) { - /* WT: is this still needed for the case ret==-3 ? */ - sc_need_room(sc, 0); - return 1; /* retry */ - } - SPOE_APPCTX(appctx)->status_code = SPOE_FRM_ERR_IO; - return -1; /* error */ - } + if (ret <= 0) + return 1; /* retry */ return framesz; } -- 2.47.3