mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-02-18 19:56:59 +00:00
BUG/MINOR: quic: SIGFPE in quic_cubic_update()
As reported by @Tristan971 in GH #2116, the congestion control window could be zero due to an inversion in the code about the reduction factor to be applied. On a new loss event, it must be applied to the slow start threshold and the window should never be below ->min_cwnd (2*max_udp_payload_sz). Same issue in both newReno and cubic algorithm. Furthermore in newReno, only the threshold was decremented. Must be backported to 2.6 and 2.7.
This commit is contained in:
parent
9d68c6aaf6
commit
595251f22e
@ -197,8 +197,8 @@ static void quic_enter_recovery(struct quic_cc *cc)
|
||||
else {
|
||||
c->last_w_max = path->cwnd;
|
||||
}
|
||||
path->cwnd = (CUBIC_BETA * path->cwnd) >> CUBIC_BETA_SCALE_SHIFT;
|
||||
c->ssthresh = QUIC_MAX(path->cwnd, path->min_cwnd);
|
||||
c->ssthresh = (CUBIC_BETA * path->cwnd) >> CUBIC_BETA_SCALE_SHIFT;
|
||||
path->cwnd = QUIC_MAX(c->ssthresh, (uint32_t)path->min_cwnd);
|
||||
c->state = QUIC_CC_ST_RP;
|
||||
TRACE_LEAVE(QUIC_EV_CONN_CC, cc->qc, NULL, cc);
|
||||
}
|
||||
|
@ -71,7 +71,8 @@ static void quic_cc_nr_enter_recovery(struct quic_cc *cc)
|
||||
|
||||
path = container_of(cc, struct quic_path, cc);
|
||||
nr->recovery_start_time = now_ms;
|
||||
nr->ssthresh = QUIC_MAX(path->cwnd >> 1, path->min_cwnd);
|
||||
nr->ssthresh = path->cwnd >> 1;
|
||||
path->cwnd = QUIC_MAX(nr->ssthresh, (uint32_t)path->min_cwnd);
|
||||
nr->state = QUIC_CC_ST_RP;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user