]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: mux-h2: always use h2_send() in h2_done_ff(), not h2_process()
authorWilly Tarreau <w@1wt.eu>
Sat, 4 Nov 2023 07:12:17 +0000 (08:12 +0100)
committerWilly Tarreau <w@1wt.eu>
Sat, 4 Nov 2023 07:12:17 +0000 (08:12 +0100)
By calling h2_process(), the code would theoretically make it possible
for a synchronous ->wake() call to provoke an indirect call to h2_snd_buf()
while we're in h2_done_ff(), which could be quite bad. The current
conditions do not permit it right now but this could easily break by
accident. Better use h2_send() and wake the task up if needed. Precise
performance tests showed no change.

src/mux_h2.c

index 785fbd9cdc5147fc689a06a1435daaae95873689..d0ab3c8a01b31ceb572ba7a04b842853b2fae9aa 100644 (file)
@@ -7070,7 +7070,8 @@ static void h2_done_ff(struct stconn *sc)
        b_add(mbuf, 9);
        h2s->sws -= sd->iobuf.data;
        h2c->mws -= sd->iobuf.data;
-       h2_process(h2c);
+       if (h2_send(h2s->h2c))
+               tasklet_wakeup(h2s->h2c->wait_event.tasklet);
 
  end:
        sd->iobuf.buf = NULL;