BUG/MINOR: mux-h2: make it possible to set the error code on an already closed stream

When sending RST_STREAM in response to a frame delivered on an already
closed stream, we used not to be able to update the error code and
deliver an RST_STREAM with a wrong code (e.g. H2_ERR_CANCEL). Let's
always allow to update the code so that RST_STREAM is always sent
with the appropriate error code (most often H2_ERR_STREAM_CLOSED).

This should be backported to 1.9 and possibly to 1.8.
This commit is contained in:
Willy Tarreau 2019-01-24 10:02:24 +01:00
parent 5b4eae33de
commit 175cebb38a

View File

@ -616,12 +616,15 @@ static inline __maybe_unused void h2c_error(struct h2c *h2c, enum h2_err err)
h2c->st0 = H2_CS_ERROR;
}
/* marks an error on the stream */
/* marks an error on the stream. It may also update an already closed stream
* (e.g. to report an error after an RST was received).
*/
static inline __maybe_unused void h2s_error(struct h2s *h2s, enum h2_err err)
{
if (h2s->id && h2s->st < H2_SS_ERROR) {
if (h2s->id && h2s->st != H2_SS_ERROR) {
h2s->errcode = err;
h2s->st = H2_SS_ERROR;
if (h2s->st < H2_SS_ERROR)
h2s->st = H2_SS_ERROR;
if (h2s->cs)
cs_set_error(h2s->cs);
}