diff --git a/include/haproxy/quic_loss.h b/include/haproxy/quic_loss.h index 0aea165ec..2ba94a9fa 100644 --- a/include/haproxy/quic_loss.h +++ b/include/haproxy/quic_loss.h @@ -128,7 +128,7 @@ static inline struct quic_pktns *quic_pto_pktns(struct quic_conn *qc, unsigned int *pto) { int i; - unsigned int duration, lpto, time_of_last_eliciting; + unsigned int duration, lpto; struct quic_loss *ql = &qc->path->loss; struct quic_pktns *pktns, *p; @@ -170,9 +170,7 @@ static inline struct quic_pktns *quic_pto_pktns(struct quic_conn *qc, } p = &qc->pktns[i]; - time_of_last_eliciting = p->tx.time_of_last_eliciting; - tmp_pto = - tick_first(lpto, tick_add(time_of_last_eliciting, duration)); + tmp_pto = tick_add(p->tx.time_of_last_eliciting, duration); if (!tick_isset(lpto) || tmp_pto < lpto) { lpto = tmp_pto; pktns = p; diff --git a/src/xprt_quic.c b/src/xprt_quic.c index 6dccb13ba..e22528653 100644 --- a/src/xprt_quic.c +++ b/src/xprt_quic.c @@ -646,8 +646,12 @@ static inline void qc_set_timer(struct quic_conn *qc) if (tick_isset(pto)) qc->timer = pto; out: - if (qc->timer_task && qc->timer != TICK_ETERNITY) - task_schedule(qc->timer_task, qc->timer); + if (qc->timer_task && qc->timer != TICK_ETERNITY) { + if (tick_is_expired(qc->timer, now_ms)) + task_wakeup(qc->timer_task, TASK_WOKEN_MSG); + else + task_schedule(qc->timer_task, qc->timer); + } TRACE_LEAVE(QUIC_EV_CONN_STIMER, qc, pktns); }