mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2024-12-11 14:05:12 +00:00
BUG/MAJOR: h2: always remove a stream from the send list before freeing it
When a stream is aborted on timeout or any reason initiated by the stream, and this stream was subscribed to the send list, we forgot to detach it when freeing it, resulting in a dead node remaining present in the send list with all usual funny consequences (memory corruption, crashes, etc). Let's simply unconditionally delete the stream.
This commit is contained in:
parent
ee8269e84d
commit
541dd82879
@ -2267,6 +2267,9 @@ static void h2_detach(struct conn_stream *cs)
|
|||||||
if (h2s->flags & (H2_SF_BLK_MBUSY | H2_SF_BLK_MROOM | H2_SF_BLK_MFCTL))
|
if (h2s->flags & (H2_SF_BLK_MBUSY | H2_SF_BLK_MROOM | H2_SF_BLK_MFCTL))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
/* the stream could be in the send list */
|
||||||
|
LIST_DEL(&h2s->list);
|
||||||
|
|
||||||
if ((h2c->flags & H2_CF_DEM_BLOCK_ANY && h2s->id == h2c->dsi) ||
|
if ((h2c->flags & H2_CF_DEM_BLOCK_ANY && h2s->id == h2c->dsi) ||
|
||||||
(h2c->flags & H2_CF_MUX_BLOCK_ANY && h2s->id == h2c->msi)) {
|
(h2c->flags & H2_CF_MUX_BLOCK_ANY && h2s->id == h2c->msi)) {
|
||||||
/* unblock the connection if it was blocked on this
|
/* unblock the connection if it was blocked on this
|
||||||
|
Loading…
Reference in New Issue
Block a user