From c45225a7851385ba18a69c2028d8efb68cd0a62f Mon Sep 17 00:00:00 2001 From: Frederic Lecaille Date: Fri, 28 Nov 2025 11:54:23 +0100 Subject: [PATCH] MINOR: quic: Add useful debugging traces in qc_idle_timer_do_rearm() Traces were missing in this function. Also add information about the connection struct from qc->conn when initialized for all the traces. Should be easily backported as far as 2.6. --- src/quic_conn.c | 13 +++++++++++-- src/quic_trace.c | 3 +++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/quic_conn.c b/src/quic_conn.c index 7ae359918..38f2208d9 100644 --- a/src/quic_conn.c +++ b/src/quic_conn.c @@ -1721,9 +1721,13 @@ void qc_idle_timer_do_rearm(struct quic_conn *qc, int arm_ack) { unsigned int expire; + TRACE_ENTER(QUIC_EV_CONN_IDLE_TIMER, qc); + /* It is possible the idle timer task has been already released. */ - if (!qc->idle_timer_task) - return; + if (!qc->idle_timer_task) { + TRACE_PROTO("idle timer already released", QUIC_EV_CONN_IDLE_TIMER, qc); + goto leave; + } if (qc->flags & (QUIC_FL_CONN_CLOSING|QUIC_FL_CONN_DRAINING)) { /* RFC 9000 10.2. Immediate Close @@ -1752,6 +1756,8 @@ void qc_idle_timer_do_rearm(struct quic_conn *qc, int arm_ack) expire = QUIC_MAX(3 * quic_pto(qc), qc->max_idle_timeout); } + TRACE_PRINTF(TRACE_LEVEL_PROTO, QUIC_EV_CONN_IDLE_TIMER, qc, 0, 0, 0, + "quic_pto=%u expire=%u", quic_pto(qc), expire); qc->idle_expire = tick_add(now_ms, MS_TO_TICKS(expire)); /* Note that the ACK timer is not armed during the handshake. So, * the handshake expiration date is taken into an account only @@ -1773,6 +1779,9 @@ void qc_idle_timer_do_rearm(struct quic_conn *qc, int arm_ack) task_queue(qc->idle_timer_task); TRACE_PROTO("idle timer armed", QUIC_EV_CONN_IDLE_TIMER, qc); } + + leave: + TRACE_LEAVE(QUIC_EV_CONN_IDLE_TIMER, qc); } /* Rearm the idle timer or ack timer for QUIC connection depending on diff --git a/src/quic_trace.c b/src/quic_trace.c index a19e65b37..6911893f5 100644 --- a/src/quic_trace.c +++ b/src/quic_trace.c @@ -119,6 +119,9 @@ static void quic_trace(enum trace_level level, uint64_t mask, const struct trace chunk_appendf(&trace_buf, " : qc@%p(%c) idle_timer_task@%p flags=0x%x", qc, (qc->flags & QUIC_FL_CONN_IS_BACK) ? 'B' : 'F', qc->idle_timer_task, qc->flags); + if (qc->conn) + chunk_appendf(&trace_buf, " conn@%p(err_code=%d flags=0x%llx)", + qc->conn, qc->conn->err_code, (ull)qc->conn->flags); if (mask & QUIC_EV_CONN_NEW) { const int *ssl_err = a2;