From: Chris Johns <chr...@rtems.org>

- Call the heap extend handler until all memory has been
  requested.

Closes #3982
---
 cpukit/libcsupport/src/rtems_heap_greedy.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/cpukit/libcsupport/src/rtems_heap_greedy.c 
b/cpukit/libcsupport/src/rtems_heap_greedy.c
index 4dda39873f..2361f17d2e 100644
--- a/cpukit/libcsupport/src/rtems_heap_greedy.c
+++ b/cpukit/libcsupport/src/rtems_heap_greedy.c
@@ -30,8 +30,20 @@ void *rtems_heap_greedy_allocate(
   size_t block_count
 )
 {
+  Heap_Control *heap = RTEMS_Malloc_Heap;
+  size_t size = 128 * 1024 * 1024;
   void *opaque;
 
+  while (size > 0) {
+    opaque = (*rtems_malloc_extend_handler)( heap, size );
+    if (opaque == NULL) {
+      size >>= 1;
+    } else {
+      if ( rtems_malloc_dirty_helper != NULL )
+       (*rtems_malloc_dirty_helper)( opaque, size );
+    }
+  }
+
   _RTEMS_Lock_allocator();
   opaque = _Heap_Greedy_allocate( RTEMS_Malloc_Heap, block_sizes, block_count 
);
   _RTEMS_Unlock_allocator();
-- 
2.24.1

_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Reply via email to