Skip to content

Commit 3521952

Browse files
committed
mm/mm.h: add mm_free_delaylist interface
This adds explicit `void mm_free_delaylist(heap)` interface so that to force freeing the heap's delaylist. Signed-off-by: Yanfeng Liu <[email protected]>
1 parent fe45d8a commit 3521952

File tree

4 files changed

+55
-5
lines changed

4 files changed

+55
-5
lines changed

arch/sim/src/sim/sim_heap.c

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ static void mm_add_delaylist(struct mm_heap_s *heap, void *mem)
9797
#endif
9898
}
9999

100-
static bool mm_free_delaylist(struct mm_heap_s *heap, bool force)
100+
static bool free_delaylist(struct mm_heap_s *heap, bool force)
101101
{
102102
bool ret = false;
103103
#if defined(CONFIG_BUILD_FLAT) || defined(__KERNEL__)
@@ -293,6 +293,22 @@ void mm_free(struct mm_heap_s *heap, void *mem)
293293
mm_delayfree(heap, mem, CONFIG_MM_FREE_DELAYCOUNT_MAX > 0);
294294
}
295295

296+
/****************************************************************************
297+
* Name: mm_free_delaylist
298+
*
299+
* Description:
300+
* force freeing the delaylist of this heap.
301+
*
302+
****************************************************************************/
303+
304+
void mm_free_delaylist(FAR struct mm_heap_s *heap)
305+
{
306+
if (heap)
307+
{
308+
free_delaylist(heap, true);
309+
}
310+
}
311+
296312
/****************************************************************************
297313
* Name: mm_realloc
298314
*
@@ -324,7 +340,7 @@ void *mm_realloc(struct mm_heap_s *heap, void *oldmem,
324340
int usmblks;
325341
int newsize;
326342

327-
mm_free_delaylist(heap, false);
343+
free_delaylist(heap, false);
328344

329345
if (size == 0)
330346
{
@@ -351,7 +367,7 @@ void *mm_realloc(struct mm_heap_s *heap, void *oldmem,
351367
while (atomic_compare_exchange_weak(&heap->usmblks, &usmblks, uordblks));
352368

353369
#if CONFIG_MM_FREE_DELAYCOUNT_MAX > 0
354-
if (mem == NULL && mm_free_delaylist(heap, true))
370+
if (mem == NULL && free_delaylist(heap, true))
355371
{
356372
return mm_realloc(heap, oldmem, size);
357373
}
@@ -420,7 +436,7 @@ void *mm_memalign(struct mm_heap_s *heap, size_t alignment, size_t size)
420436
int uordblks;
421437
int usmblks;
422438

423-
mm_free_delaylist(heap, false);
439+
free_delaylist(heap, false);
424440
mem = host_memalign(alignment, size);
425441

426442
if (mem == NULL)
@@ -444,7 +460,7 @@ void *mm_memalign(struct mm_heap_s *heap, size_t alignment, size_t size)
444460
while (atomic_compare_exchange_weak(&heap->usmblks, &usmblks, uordblks));
445461

446462
#if CONFIG_MM_FREE_DELAYCOUNT_MAX > 0
447-
if (mem == NULL && mm_free_delaylist(heap, true))
463+
if (mem == NULL && free_delaylist(heap, true))
448464
{
449465
return mm_memalign(heap, alignment, size);
450466
}

include/nuttx/mm/mm.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,8 @@ void kmm_addregion(FAR void *heapstart, size_t heapsize);
263263

264264
FAR void *mm_malloc(FAR struct mm_heap_s *heap, size_t size) malloc_like1(2);
265265

266+
void mm_free_delaylist(FAR struct mm_heap_s *heap);
267+
266268
/* Functions contained in kmm_malloc.c **************************************/
267269

268270
#ifdef CONFIG_MM_KERNEL_HEAP

mm/mm_heap/mm_malloc.c

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,22 @@ void mm_mempool_dump_handle(FAR struct mempool_s *pool, FAR void *arg)
137137
* Public Functions
138138
****************************************************************************/
139139

140+
/****************************************************************************
141+
* Name: mm_free_delaylist
142+
*
143+
* Description:
144+
* force freeing the delaylist of this heap.
145+
*
146+
****************************************************************************/
147+
148+
void mm_free_delaylist(FAR struct mm_heap_s *heap)
149+
{
150+
if (heap)
151+
{
152+
free_delaylist(heap, true);
153+
}
154+
}
155+
140156
/****************************************************************************
141157
* Name: mm_malloc
142158
*

mm/tlsf/mm_tlsf.c

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1447,3 +1447,19 @@ FAR void *mm_zalloc(FAR struct mm_heap_s *heap, size_t size)
14471447

14481448
return alloc;
14491449
}
1450+
1451+
/****************************************************************************
1452+
* Name: mm_free_delaylist
1453+
*
1454+
* Description:
1455+
* force freeing the delaylist of this heap.
1456+
*
1457+
****************************************************************************/
1458+
1459+
void mm_free_delaylist(FAR struct mm_heap_s *heap)
1460+
{
1461+
if (heap)
1462+
{
1463+
free_delaylist(heap, true);
1464+
}
1465+
}

0 commit comments

Comments
 (0)