BUG/MINOR: mux-h2: don't refrain from sending an RST_STREAM after another one

The test in h2s_send_rst_stream() is excessive, it refrains from sending an
RST_STREAM if *the last frame* was an RST_STREAM, regardless of the stream
ID. In a context where both clients and servers abort a lot, it could happen
that one RST_STREAM is dropped from responses from time to time, causing
delays to the client.

This must be backported to 2.0, 1.9 and 1.8.
This commit is contained in:
Willy Tarreau 2019-08-06 10:01:40 +02:00
parent 1b77262cfb
commit 231f616170

View File

@ -1321,7 +1321,7 @@ static int h2s_send_rst_stream(struct h2c *h2c, struct h2s *h2s)
/* RFC7540#5.4.2: To avoid looping, an endpoint MUST NOT send a /* RFC7540#5.4.2: To avoid looping, an endpoint MUST NOT send a
* RST_STREAM in response to a RST_STREAM frame. * RST_STREAM in response to a RST_STREAM frame.
*/ */
if (h2c->dft == H2_FT_RST_STREAM) { if (h2c->dsi == h2s->id && h2c->dft == H2_FT_RST_STREAM) {
ret = 1; ret = 1;
goto ignore; goto ignore;
} }