From 5f8b5cbb20e4a3bd1b02c2b9545fad0068a49d20 Mon Sep 17 00:00:00 2001 From: sg Date: Wed, 16 Mar 2016 21:49:37 +0100 Subject: [PATCH] reset rto timer on fast retransmission (see task #13757, patch by Joel Cunningham) --- CHANGELOG | 3 +++ src/core/tcp_out.c | 5 ++++- 2 files changed, 7 insertions(+), 1 deletion(-) 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; } }