diff options
author | Keith Winstein <keithw@mit.edu> | 2012-05-02 15:11:36 -0400 |
---|---|---|
committer | Keith Winstein <keithw@mit.edu> | 2012-05-02 15:11:36 -0400 |
commit | d4bfe61604eda5ccd217853aa2c7ac37c00bf1af (patch) | |
tree | 88a04dd77510a071a1b70414702b74596d733307 | |
parent | 4a050c51098dadc4c0ac38cbf90be620003a0e49 (diff) |
Fix bug in retransmission logic
-rw-r--r-- | src/network/transportsender.cc | 9 |
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); } |