diff --git a/src/mux_h2.c b/src/mux_h2.c index 6ec53e88f..be301835c 100644 --- a/src/mux_h2.c +++ b/src/mux_h2.c @@ -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); }