bug 1387: CRASH in threaded-simulator
authorMathieu Lacage <mathieu.lacage@cutebugs.net>
Sun, 01 Apr 2012 09:51:05 -0400
changeset 7812 61fc92f6d7f4
parent 7811 b2b835915665
child 7813 7dfff285290d
bug 1387: CRASH in threaded-simulator
src/core/model/calendar-scheduler.cc
--- a/src/core/model/calendar-scheduler.cc	Sun Apr 01 09:47:46 2012 -0400
+++ b/src/core/model/calendar-scheduler.cc	Sun Apr 01 09:51:05 2012 -0400
@@ -154,7 +154,12 @@
 {
   uint32_t i = m_lastBucket;
   uint64_t bucketTop = m_bucketTop;
-  Scheduler::Event minEvent = { static_cast<uint64_t>(0), { static_cast<uint32_t>(~0), static_cast<uint32_t>(~0)}};
+  int32_t minBucket = -1;
+  Scheduler::EventKey minKey;
+  NS_ASSERT(!IsEmpty());
+  minKey.m_ts = uint64_t(-int64_t(1));
+  minKey.m_uid = 0;
+  minKey.m_context = 0xffffffff;
   do
     {
       if (!m_buckets[i].empty ())
@@ -168,9 +173,10 @@
               m_buckets[i].pop_front ();
               return next;
             }
-          if (next.key < minEvent.key)
+          if (next.key < minKey)
             {
-              minEvent = next;
+              minKey = next.key;
+              minBucket = i;
             }
         }
       i++;
@@ -179,12 +185,13 @@
     }
   while (i != m_lastBucket);
 
-  m_lastPrio = minEvent.key.m_ts;
-  m_lastBucket = Hash (minEvent.key.m_ts);
-  m_bucketTop = (minEvent.key.m_ts / m_width + 1) * m_width;
-  m_buckets[m_lastBucket].pop_front ();
+  m_lastPrio = minKey.m_ts;
+  m_lastBucket = Hash (minKey.m_ts);
+  m_bucketTop = (minKey.m_ts / m_width + 1) * m_width;
+  Scheduler::Event next = m_buckets[minBucket].front();
+  m_buckets[minBucket].pop_front ();
 
-  return minEvent;
+  return next;
 }
 
 Scheduler::Event