]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MEDIUM: spoe: Always retry when an applet fails to send a frame
authorChristopher Faulet <cfaulet@haproxy.com>
Thu, 18 Apr 2024 06:58:55 +0000 (08:58 +0200)
committerChristopher Faulet <cfaulet@haproxy.com>
Thu, 18 Apr 2024 07:17:03 +0000 (09:17 +0200)
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

index f646581efd7dde92c9e4e84421f003dfa8a8580c..3fc058c283484288cc4867a17716160c567f9efa 100644 (file)
@@ -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;
 }