summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKeith Winstein <keithw@mit.edu>2012-05-02 15:11:36 -0400
committerKeith Winstein <keithw@mit.edu>2012-05-02 15:11:36 -0400
commitd4bfe61604eda5ccd217853aa2c7ac37c00bf1af (patch)
tree88a04dd77510a071a1b70414702b74596d733307
parent4a050c51098dadc4c0ac38cbf90be620003a0e49 (diff)
Fix bug in retransmission logic
-rw-r--r--src/network/transportsender.cc9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/network/transportsender.cc b/src/network/transportsender.cc
index 145e84c..22a44de 100644
--- a/src/network/transportsender.cc
+++ b/src/network/transportsender.cc
@@ -78,9 +78,7 @@ void TransportSender<MyState>::calculate_timers( void )
next_ack_time = now + ACK_DELAY;
}
- if ( ( !(current_state == assumed_receiver_state->state)
- && (last_heard + ACTIVE_RETRY_TIMEOUT > now) )
- || !(current_state == sent_states.back().state) ) { /* pending data to send */
+ if ( !(current_state == sent_states.back().state) ) { /* pending data to send */
if ( next_send_time > now + SEND_MINDELAY ) {
next_send_time = now + SEND_MINDELAY;
}
@@ -88,6 +86,11 @@ void TransportSender<MyState>::calculate_timers( void )
if ( next_send_time < sent_states.back().timestamp + send_interval() ) {
next_send_time = sent_states.back().timestamp + send_interval();
}
+ } else if ( ( !(current_state == assumed_receiver_state->state)
+ && (last_heard + ACTIVE_RETRY_TIMEOUT > now) ) ) {
+ if ( next_send_time < sent_states.back().timestamp + send_interval() ) {
+ next_send_time = sent_states.back().timestamp + send_interval();
+ }
} else {
next_send_time = uint64_t(-1);
}