diff --git a/mm/Kconfig b/mm/Kconfig index 6d702f76298..26481ba306b 100644 --- a/mm/Kconfig +++ b/mm/Kconfig @@ -298,6 +298,11 @@ config MM_DUMP_ON_FAILURE default n depends on DEBUG_MM +config MM_DUMP_DETAILS_ON_FAILURE + bool "Dump all used memory blocks on allocation failure" + default n + depends on MM_DUMP_ON_FAILURE + config MM_PANIC_ON_FAILURE bool "Panic on allocation failure" default n diff --git a/mm/mm_heap/mm_malloc.c b/mm/mm_heap/mm_malloc.c index 4a299101b37..47cb33bcb32 100644 --- a/mm/mm_heap/mm_malloc.c +++ b/mm/mm_heap/mm_malloc.c @@ -273,6 +273,12 @@ FAR void *mm_malloc(FAR struct mm_heap_s *heap, size_t size) { #ifdef CONFIG_MM_DUMP_ON_FAILURE struct mallinfo minfo; +# ifdef CONFIG_MM_DUMP_DETAILS_ON_FAILURE + struct mm_memdump_s dump = + { + MM_BACKTRACE_ALLOC_PID, 0, ULONG_MAX + }; +# endif #endif mwarn("WARNING: Allocation failed, size %zu\n", alignsize); @@ -291,7 +297,9 @@ FAR void *mm_malloc(FAR struct mm_heap_s *heap, size_t size) mempool_multiple_foreach(heap->mm_mpool, mm_mempool_dump_handle, NULL); # endif - +# ifdef CONFIG_MM_DUMP_DETAILS_ON_FAILURE + mm_memdump(heap, &dump); +# endif #endif #ifdef CONFIG_MM_PANIC_ON_FAILURE PANIC();