From 225df7593f80d0a12d2f26cdbcb4a2e98ea2823d Mon Sep 17 00:00:00 2001 From: Mathieu Lacage Date: Thu, 15 Nov 2007 16:23:26 +0100 Subject: [PATCH] backoff end time is never in the past. --- src/devices/wifi/dcf-manager.cc | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/src/devices/wifi/dcf-manager.cc b/src/devices/wifi/dcf-manager.cc index 3c32d1099..ebd7f4e24 100644 --- a/src/devices/wifi/dcf-manager.cc +++ b/src/devices/wifi/dcf-manager.cc @@ -341,29 +341,30 @@ DcfManager::DoRestartAccessTimeoutIfNeeded (void) DcfState *state = *i; if (state->NeedsAccess ()) { - accessTimeoutNeeded = true; - expectedBackoffEnd = std::min (expectedBackoffEnd, GetBackoffEndFor (state)); + Time tmp = GetBackoffEndFor (state); + if (tmp > Simulator::Now ()) + { + accessTimeoutNeeded = true; + expectedBackoffEnd = std::min (expectedBackoffEnd, tmp); + } } } if (accessTimeoutNeeded) { MY_DEBUG ("expected backoff end="< Simulator::Now ()) + Time expectedBackoffDelay = expectedBackoffEnd - Simulator::Now (); + if (m_accessTimeout.IsRunning () && + Simulator::GetDelayLeft (m_accessTimeout) > expectedBackoffDelay) { - Time expectedBackoffDelay = expectedBackoffEnd - Simulator::Now (); - if (m_accessTimeout.IsRunning () && - Simulator::GetDelayLeft (m_accessTimeout) > expectedBackoffDelay) - { - m_accessTimeout.Cancel (); - } - if (m_accessTimeout.IsExpired ()) - { - m_accessTimeout = Simulator::Schedule (expectedBackoffDelay, - &DcfManager::AccessTimeout, this); - } + m_accessTimeout.Cancel (); + } + if (m_accessTimeout.IsExpired ()) + { + m_accessTimeout = Simulator::Schedule (expectedBackoffDelay, + &DcfManager::AccessTimeout, this); } } -} + } void DcfManager::NotifyRxStartNow (Time duration)