diff --git a/CHANGELOG b/CHANGELOG index b427d9c4..68f7af03 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -302,6 +302,9 @@ HISTORY ++ Bugfixes: + 2013-03-16: Joel Cunningham + * tcp_out.c: reset rto timer on fast retransmission + 2016-03-16: Deomid Ryabkov * tcp_out.c: fixed bug #46384 Segment size calculation bug with MSS != TCP_MSS diff --git a/src/core/tcp_out.c b/src/core/tcp_out.c index a7b05954..74949968 100644 --- a/src/core/tcp_out.c +++ b/src/core/tcp_out.c @@ -1185,7 +1185,7 @@ tcp_output_segment(struct tcp_seg *seg, struct tcp_pcb *pcb) /* Set retransmission timer running if it is not currently enabled This must be set before checking the route. */ - if (pcb->rtime == -1) { + if (pcb->rtime < 0) { pcb->rtime = 0; } @@ -1460,6 +1460,9 @@ tcp_rexmit_fast(struct tcp_pcb *pcb) pcb->cwnd = pcb->ssthresh + 3 * pcb->mss; pcb->flags |= TF_INFR; + + /* Reset the retransmission timer to prevent immediate rto retransmissions */ + pcb->rtime = 0; } }