[rtems commit] heap: Fix heap statistics with protection enabled

Sebastian Huber sebh at rtems.org
Wed May 4 13:53:17 UTC 2022


Module:    rtems
Branch:    5
Commit:    be5d2bc03d2c5d86489cb24d3b88e95a4b1221f8
Changeset: http://git.rtems.org/rtems/commit/?id=be5d2bc03d2c5d86489cb24d3b88e95a4b1221f8

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Thu Apr 28 09:57:41 2022 +0200

heap: Fix heap statistics with protection enabled

Close #4643.

---

 cpukit/include/rtems/score/heapimpl.h | 10 +---------
 cpukit/score/src/heapallocate.c       |  9 +++++++++
 testsuites/libtests/malloctest/init.c |  4 ++++
 3 files changed, 14 insertions(+), 9 deletions(-)

diff --git a/cpukit/include/rtems/score/heapimpl.h b/cpukit/include/rtems/score/heapimpl.h
index d3ee0ff88a..f74b5fc562 100644
--- a/cpukit/include/rtems/score/heapimpl.h
+++ b/cpukit/include/rtems/score/heapimpl.h
@@ -407,15 +407,7 @@ Heap_Block *_Heap_Block_allocate(
     (*heap->Protection.block_error)( heap, block, reason );
   }
 
-  static inline void _Heap_Protection_free_all_delayed_blocks( Heap_Control *heap )
-  {
-    uintptr_t large = 0
-      - (uintptr_t) HEAP_BLOCK_HEADER_SIZE
-      - (uintptr_t) HEAP_ALLOC_BONUS
-      - (uintptr_t) 1;
-    void *p = _Heap_Allocate( heap, large );
-    _Heap_Free( heap, p );
-  }
+  void _Heap_Protection_free_all_delayed_blocks( Heap_Control *heap );
 #endif
 
 /**
diff --git a/cpukit/score/src/heapallocate.c b/cpukit/score/src/heapallocate.c
index 4b8b3f0de6..1c71e4a037 100644
--- a/cpukit/score/src/heapallocate.c
+++ b/cpukit/score/src/heapallocate.c
@@ -73,6 +73,15 @@
 
     return search_again;
   }
+
+  void _Heap_Protection_free_all_delayed_blocks( Heap_Control *heap )
+  {
+    bool search_again;
+
+    do {
+      search_again = _Heap_Protection_free_delayed_blocks( heap, 0 );
+    } while ( search_again );
+  }
 #endif
 
 #ifdef RTEMS_HEAP_DEBUG
diff --git a/testsuites/libtests/malloctest/init.c b/testsuites/libtests/malloctest/init.c
index 1d91385683..1e5c14fe4b 100644
--- a/testsuites/libtests/malloctest/init.c
+++ b/testsuites/libtests/malloctest/init.c
@@ -122,9 +122,13 @@ static void test_heap_default_init(void)
 
 static void test_free( void *addr )
 {
+  uint32_t failed_allocs;
+
   rtems_test_assert( _Heap_Free( &TestHeap, addr ) );
 
+  failed_allocs = TestHeap.stats.failed_allocs;
   _Heap_Protection_free_all_delayed_blocks( &TestHeap );
+  rtems_test_assert( failed_allocs == TestHeap.stats.failed_allocs );
 }
 
 static void test_heap_cases_1(void)



More information about the vc mailing list