diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2022-04-28 08:56:59 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2022-04-28 09:16:54 +0200 |
commit | 8b18037f203b2b2dfceae4fb46e7eca388f229ad (patch) | |
tree | 4d2839fac7b365974647549ae0812b4bbedd4c7a | |
parent | sp65/init.c: Add file header and license (diff) | |
download | rtems-8b18037f203b2b2dfceae4fb46e7eca388f229ad.tar.bz2 |
heap: Fix heap statistics with protection enabled
Close #4644.
-rw-r--r-- | cpukit/include/rtems/score/heapimpl.h | 10 | ||||
-rw-r--r-- | cpukit/score/src/heapallocate.c | 9 | ||||
-rw-r--r-- | 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 e6b6feb800..2b1ef21c83 100644 --- a/cpukit/include/rtems/score/heapimpl.h +++ b/cpukit/include/rtems/score/heapimpl.h @@ -427,15 +427,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 162a5f8933..049a1279b1 100644 --- a/cpukit/score/src/heapallocate.c +++ b/cpukit/score/src/heapallocate.c @@ -93,6 +93,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 7d03a2deab..05d97a27d5 100644 --- a/testsuites/libtests/malloctest/init.c +++ b/testsuites/libtests/malloctest/init.c @@ -141,9 +141,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) |