From 1cb0f309333a2ab3024e440c571ae4e5d9a8a4c5 Mon Sep 17 00:00:00 2001 From: Angus Gratton Date: Wed, 10 May 2017 17:17:52 +1000 Subject: [PATCH] heap_caps: Add heap_caps_check_integrity() function --- components/heap/heap_caps.c | 15 +++++++++++++++ components/heap/include/esp_heap_caps.h | 15 +++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/components/heap/heap_caps.c b/components/heap/heap_caps.c index 7993e37137..1c7620292b 100644 --- a/components/heap/heap_caps.c +++ b/components/heap/heap_caps.c @@ -288,3 +288,18 @@ void heap_caps_print_heap_info( uint32_t caps ) printf(" free %d allocated %d min_free %d largest_free_block %d\n", info.total_free_bytes, info.total_allocated_bytes, info.minimum_free_bytes, info.largest_free_block); } +bool heap_caps_check_integrity(uint32_t caps, bool print_errors) +{ + bool all_heaps = caps & MALLOC_CAP_INVALID; + bool valid = true; + + heap_t *heap; + SLIST_FOREACH(heap, ®istered_heaps, next) { + if (heap->heap != NULL + && (all_heaps || (get_all_caps(heap) & caps) == caps)) { + valid = multi_heap_check(heap->heap, print_errors) && valid; + } + } + + return valid; +} diff --git a/components/heap/include/esp_heap_caps.h b/components/heap/include/esp_heap_caps.h index 23c310fa26..5206429837 100644 --- a/components/heap/include/esp_heap_caps.h +++ b/components/heap/include/esp_heap_caps.h @@ -154,3 +154,18 @@ void heap_caps_get_info( multi_heap_info_t *info, uint32_t caps ); */ void heap_caps_print_heap_info( uint32_t caps ); +/** + * @brief Check integrity of all heaps with the given capabilities. + * + * Calls multi_heap_check() on all heaps which share the given capabilities. Optionally + * print errors if the heaps are corrupt. + * + * Pass caps == MALLOC_CAP_INVALID to test all registered heaps. + * + * @param caps Bitwise OR of MALLOC_CAP_* flags indicating the type + * of memory + * @param print_errors Print specific errors if heap corruption is found. + * + * @return True if all heaps are valid, False if at least one heap is corrupt. + */ +bool heap_caps_check_integrity(uint32_t caps, bool print_errors); -- 2.40.0