Hi,

Recent commit supposedly silenced warnings in mm_heap, in fact it botched 
mm_mallinfo() assertions completely. Attached patch fixes this.

Best Regards,
   Juha Niskanen
From 0639469819648a33d37694d6b8f5fadc25e3fa6f Mon Sep 17 00:00:00 2001
From: Juha Niskanen <juha.niska...@haltian.com>
Date: Mon, 17 Feb 2020 11:12:40 +0200
Subject: [PATCH] mm/mm_heap/mm_mallinfo.c: fix assertion broken in 312ea9f9

---
 mm/mm_heap/mm_mallinfo.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/mm/mm_heap/mm_mallinfo.c b/mm/mm_heap/mm_mallinfo.c
index dd980d1..9715aaf 100644
--- a/mm/mm_heap/mm_mallinfo.c
+++ b/mm/mm_heap/mm_mallinfo.c
@@ -61,7 +61,7 @@ int mm_mallinfo(FAR struct mm_heap_s *heap, FAR struct mallinfo *info)
 {
   FAR struct mm_allocnode_s *node;
 #ifdef CONFIG_DEBUG_ASSERTIONS
-  FAR struct mm_allocnode_s *prev = NULL;
+  FAR struct mm_allocnode_s *prev;
 #endif
   size_t mxordblk = 0;
   int    ordblks  = 0;  /* Number of non-inuse chunks */
@@ -81,6 +81,9 @@ int mm_mallinfo(FAR struct mm_heap_s *heap, FAR struct mallinfo *info)
   for (region = 0; region < heap->mm_nregions; region++)
 #endif
     {
+#ifdef CONFIG_DEBUG_ASSERTIONS
+      prev = NULL;
+#endif
       /* Visit each node in the region
        * Retake the semaphore for each region to reduce latencies
        */
@@ -124,11 +127,11 @@ int mm_mallinfo(FAR struct mm_heap_s *heap, FAR struct mallinfo *info)
                   mxordblk = node->size;
                 }
             }
+          DEBUGASSERT(prev == NULL ||
+                      prev->size == (node->preceding & ~MM_ALLOC_BIT));
 #ifdef CONFIG_DEBUG_ASSERTIONS
           prev = node;
 #endif
-          DEBUGASSERT(prev == NULL ||
-                      prev->size == (node->preceding & ~MM_ALLOC_BIT));
         }
 
       minfo("region=%d node=%p heapend=%p\n",
-- 
2.7.4

Reply via email to