{
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
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
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 <qc> QUIC connection depending on <read>
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;