From: Christopher Faulet Date: Thu, 18 Apr 2024 06:58:55 +0000 (+0200) Subject: BUG/MEDIUM: spoe: Always retry when an applet fails to send a frame X-Git-Tag: v3.0-dev8~27 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4fd656e311d7817e03e0f9ddca4c6635ccd4476f;p=thirdparty%2Fhaproxy.git 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. --- 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; }