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.
static int
spoe_send_frame(struct appctx *appctx, char *buf, size_t framesz)
{
- struct stconn *sc = appctx_sc(appctx);
int ret;
uint32_t netint;
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;
}