Hi,

So what I found in Holger's trace is that the H2 connection has no
more streams and was present in the wait queue. The state of the task
being deleted doesn't make sense, indicating a memory corruption
possibly caused by a use-after-free or a double free or by a wrong
wakeup when a buffer is available, as in a few commits fixed in 1.8.4
which we thought would have a minor impact only.

After some thought I realized that there is a possible issue with the
way H2 streams are detached from their connection : in h2_detach(), if
they are the last one, they can destroy the connection and release it.
But it's possible that the connection's task was already woken up and
queued for being processed immediately afterwards (the multi-thread
scheduler can trigger this), so I'll have to rethink the way detaching
is performed and only delegate to an asynchronous task. Since your
config doesn't use threads it's not this which causes the problem, but
that caught my attention and fixing it might lead to a more robust
design.

Peter, were you using threads with H2 or not ? Just trying to draw
some statistics here.

I'll keep you updated of any other discovery anyway.

Cheers,
Willy

Reply via email to