BUG/MEDIUM: h2: properly send an RST_STREAM on mux stream error
Some stream errors are detected on the MUX path (eg: H1 response
encoding). The ones forgot to emit an RST_STREAM frame, causing the
client to wait and/or to see the connection being immediately closed.
This is now fixed.
diff --git a/src/mux_h2.c b/src/mux_h2.c
index 2af5ffd..28b1684 100644
--- a/src/mux_h2.c
+++ b/src/mux_h2.c
@@ -2986,15 +2986,19 @@
}
}
+ /* RST are sent similarly to frame acks */
+ if (h2s->st == H2_SS_ERROR) {
+ cs->flags |= CS_FL_ERROR;
+ if (h2c_send_rst_stream(h2s->h2c, h2s) > 0)
+ h2s->st = H2_SS_CLOSED;
+ }
+
if (h2s->flags & H2_SF_BLK_SFCTL) {
/* stream flow control, quit the list */
LIST_DEL(&h2s->list);
LIST_INIT(&h2s->list);
}
- if (h2s->st == H2_SS_ERROR)
- cs->flags |= CS_FL_ERROR;
-
return total;
}