On Fri, Aug 15, 2025 at 03:33:10PM +0300, Luke Seelenbinder wrote:
> Hi all,
> We've just isolated a very consistent way to recreate this (or similar 
> conditions) in 3.2.4.
> If you reload HAProxy and then use an already established QUIC connection, 
> the following occurs consistently on the previous worker process:
> haproxy[1464934]: FATAL: bug condition "((&qcs->el_buf)->n != 
> (&qcs->el_buf))" matched at src/mux_quic.c:3738
> haproxy[1464934]:   call trace(13):
> haproxy[1464934]:   | 0x56525634e410 <17 1c 00 e8 60 e8 1b 00]: main+0x51ab0 
> > ha_backtrace_to_stderr
> haproxy[1464934]:   | 0x5652564fcbc8 <89 d6 48 89 df ff 50 18]: 
> cli_io_handler+0x2cec8
> haproxy[1464934]:   | 0x5652565011e2 <48 89 df e8 1e b8 ff ff]: 
> sc_conn_io_cb+0x82/0xbd > cli_io_handler+0x2cd00
> haproxy[1464934]:   | 0x5652565ad98d <89 c2 48 89 cf 41 ff d1]: 
> run_tasks_from_lists+0x2fd/0x89b
> haproxy[1464934]:   | 0x5652565ae31a <4e 30 01 e8 76 f3 ff ff]: 
> process_runnable_tasks+0x3ea/0x8f3 > haproxy[1464934]:   | 0x565256521966 <01 
> 00 00 e8 ca c5 08 00]: run_poll_loop+0x146/0x567 > haproxy[1464934]:   | 
> 0x565256521fe1 <00 00 00 e8 3f f8 ff ff]: run_thread_poll_loop+0x251/0x54a > 
> run_poll_loop+0
> haproxy[1464934]:   | 0x5652562fddbf <48 d0 00 e8 d1 3f 22 00]: 
> main+0x145f/0x21f0 > run_thread_poll_loop
> debugged:
> #0  0x000056525634e426 in qmux_strm_snd_buf (sc=<optimized out>, 
> buf=0x7f0f1ea26478, count=16144, flags=<optimized out>) at src/mux_quic.c:3738
> 3738          BUG_ON(LIST_INLIST(&qcs->el_buf));
> (gdb) bt
> #0  0x000056525634e426 in qmux_strm_snd_buf (sc=<optimized out>, 
> buf=0x7f0f1ea26478, count=16144, flags=<optimized out>) at src/mux_quic.c:3738
> #1  0x00005652564fcbc8 in sc_conn_send (sc=sc@entry=0x7f0f1f493c60) at 
> src/stconn.c:1728
> #2  0x00005652565011e2 in sc_conn_io_cb (t=0x7f0f1f6cc640, 
> ctx=0x7f0f1f493c60, state=<optimized out>) at src/stconn.c:1925
> #3  0x00005652565ad98d in run_tasks_from_lists (budgets=<optimized out>) at 
> src/task.c:648
> #4  0x00005652565ae31a in process_runnable_tasks () at src/task.c:889
> #5  0x0000565256521966 in run_poll_loop () at src/haproxy.c:2851
> #6  0x0000565256521fe1 in run_thread_poll_loop (data=<optimized out>) at 
> src/haproxy.c:3067
> #7  0x00005652562fddbf in main (argc=<optimized out>, argv=<optimized out>) 
> at src/haproxy.c:3670
> We have the following relevant config:
>   # Enable proper binding for QUIC
>   setcap cap_net_bind_service
>   tune.quic.socket-owner connection
>   tune.quic.frontend.max-idle-timeout 300s
>   hard-stop-after 30m
> We're not certain this is the same issue, but at least one thread to pull on 
> in the meantime. Is there anything else we can pull from the coredump that 
> would assist debugging this?

Thanks for the report. A similar issue was also opened on github also
related to reload. I have probably missed something here. I did not have
time recently to work on this, but I'm planning to look at this soon.
I'll let you know if I need anything or if I'm able to produce a fix.

Regards,

-- 
Amaury Denoyelle


Reply via email to