diff --git a/src/mux_quic.c b/src/mux_quic.c index 9326dc819..2156730cf 100644 --- a/src/mux_quic.c +++ b/src/mux_quic.c @@ -395,7 +395,6 @@ static int qc_init(struct connection *conn, struct proxy *prx, qcc->conn = conn; conn->ctx = qcc; - conn->qc->qcc = qcc; qcc->app_ops = NULL; @@ -441,6 +440,7 @@ static int qc_init(struct connection *conn, struct proxy *prx, qcc->wait_event.tasklet->process = qc_io_cb; qcc->wait_event.tasklet->context = qcc; + HA_ATOMIC_STORE(&conn->qc->qcc, qcc); /* init read cycle */ tasklet_wakeup(qcc->wait_event.tasklet); diff --git a/src/xprt_quic.c b/src/xprt_quic.c index 4d0f75246..094bb64c9 100644 --- a/src/xprt_quic.c +++ b/src/xprt_quic.c @@ -4456,7 +4456,7 @@ static ssize_t qc_lstnr_pkt_rcv(unsigned char *buf, const unsigned char *end, * initialized. */ conn_ctx = HA_ATOMIC_LOAD(&qc->xprt_ctx); - if (conn_ctx && conn_ctx->wait_event.tasklet) + if (conn_ctx && HA_ATOMIC_LOAD(&qc->qcc)) tasklet_wakeup(conn_ctx->wait_event.tasklet); TRACE_LEAVE(QUIC_EV_CONN_LPKT, qc ? qc : NULL, pkt);