more asserts, add failing tests, fix them
authorMathieu Lacage <mathieu.lacage@sophia.inria.fr>
Thu, 28 Jun 2007 13:01:40 +0200
changeset 906 459b7a591892
parent 905 a18fd9def067
child 907 c67b33c30a8e
more asserts, add failing tests, fix them
src/common/packet-metadata.cc
--- a/src/common/packet-metadata.cc	Thu Jun 28 12:29:21 2007 +0200
+++ b/src/common/packet-metadata.cc	Thu Jun 28 13:01:40 2007 +0200
@@ -370,6 +370,7 @@
     }
   NS_ASSERT (m_tail != 0xffff);
   NS_ASSERT (m_head != 0xffff);
+  NS_ASSERT (written >= 8);
   m_used += written;
   m_data->m_dirtyEnd = m_used;
 }
@@ -395,6 +396,7 @@
     }
   NS_ASSERT (m_tail != 0xffff);
   NS_ASSERT (m_head != 0xffff);
+  NS_ASSERT (written >= 8);
   m_used += written;
   m_data->m_dirtyEnd = m_used;
 }
@@ -698,7 +700,7 @@
     }
   struct PacketMetadata::SmallItem item;
   struct PacketMetadata::ExtraItem extraItem;
-  ReadItems (m_head, &item, &extraItem);
+  uint32_t read = ReadItems (m_head, &item, &extraItem);
   if ((item.typeUid & 0xfffffffe) != uid ||
       item.size != size)
     {
@@ -710,11 +712,19 @@
     {
       NS_FATAL_ERROR ("Removing incomplete header.");
     }
-  m_head = item.next;
-  if (m_head > m_tail)
+  if (m_head + read == m_used)
     {
       m_used = m_head;
     }
+  if (item.next == 0xffff)
+    {
+      m_head = 0xffff;
+      m_tail = 0xffff;
+    }
+  else
+    {
+      m_head = item.next;
+    }
 }
 void 
 PacketMetadata::DoAddTrailer (uint32_t uid, uint32_t size)
@@ -742,7 +752,7 @@
     }
   struct PacketMetadata::SmallItem item;
   struct PacketMetadata::ExtraItem extraItem;
-  ReadItems (m_tail, &item, &extraItem);
+  uint32_t read = ReadItems (m_tail, &item, &extraItem);
   if ((item.typeUid & 0xfffffffe) != uid ||
       item.size != size)
     {
@@ -754,10 +764,18 @@
     {
       NS_FATAL_ERROR ("Removing incomplete trailer.");
     }
-  m_tail = item.prev;
-  if (m_tail > m_head)
+  if (m_tail + read == m_used)
     {
       m_used = m_tail;
+    }  
+  if (item.prev == 0xffff)
+    {
+      m_head = 0xffff;
+      m_tail = 0xffff;
+    }
+  else
+    {
+      m_tail = item.prev;
     }
 }
 void
@@ -1655,6 +1673,18 @@
   p1.AddAtEnd (p2);
   CHECK_HISTORY (p, 2, 5, 10);
 
+  p = Packet ();
+  ADD_TRAILER (p, 10);
+  REM_TRAILER (p, 10);
+  ADD_TRAILER (p, 10);
+  CHECK_HISTORY (p, 1, 10);
+
+  p = Packet ();
+  ADD_HEADER (p, 10);
+  REM_HEADER (p, 10);
+  ADD_HEADER (p, 10);
+  CHECK_HISTORY (p, 1, 10);
+
   return ok;
 }