When exiting the recovery period and re-entering congestion avoidance,
the consecutive_losses counter was not reset. This meant that if a loss
event arrived immediately after the ACK that ended recovery, the counter
would still hold the value that triggered recovery, causing an immediate
re-entry into recovery (recovery -> CA -> recovery loop).
Resetting consecutive_losses to 0 on recovery exit matches the behavior
of resetting it on ACK in CA, ensuring a clean slate for the new
congestion avoidance period.
Must be backported to all versions.
c->state = QUIC_CC_ST_CA;
c->recovery_start_time = TICK_ETERNITY;
+ c->consecutive_losses = 0;
break;
case QUIC_CC_EVT_LOSS:
break;