[Xenomai] [PATCH v2] boilerplate: Limit memory usage tlsf-heap
Ronny Meeus
ronny.meeus at gmail.com
Thu Dec 15 12:45:20 CET 2016
Before this patch the system memory pool's (tlsf variant) behavior was
to grow in case allocations were done when depleted. This is a
contradiction with the expected behavior (see mem-pool-size tunable
documentation). When the pool is depleted, an error should be retuned
instead of growing the pool.
This patch solves this bug.
diff --git a/lib/boilerplate/tlsf/tlsf.c b/lib/boilerplate/tlsf/tlsf.c
--- a/lib/boilerplate/tlsf/tlsf.c
+++ b/lib/boilerplate/tlsf/tlsf.c
@@ -625,6 +625,7 @@ void *tlsf_malloc(size_t size)
void *area;
area_size = sizeof(tlsf_t) + BHDR_OVERHEAD * 8; /* Just a safety constant */
+ area_size += size;
area_size = (area_size > DEFAULT_AREA_SIZE) ? area_size : DEFAULT_AREA_SIZE;
area = get_new_area(&area_size);
if (area == ((void *) ~0))
@@ -709,23 +710,6 @@ void *malloc_ex(size_t size, void *mem_p
/* Searching a free block, recall that this function changes the values of fl and sl,
so they are not longer valid when the function fails */
b = FIND_SUITABLE_BLOCK(tlsf, &fl, &sl);
-#if USE_MMAP || USE_SBRK
- if (!b && mem_pool == mp) { /* Don't grow private pools */
- size_t area_size;
- void *area;
- /* Growing the pool size when needed */
- area_size = size + BHDR_OVERHEAD * 8; /* size plus enough room for the requered headers. */
- area_size = (area_size > DEFAULT_AREA_SIZE) ? area_size : DEFAULT_AREA_SIZE;
- area = get_new_area(&area_size); /* Call sbrk or mmap */
- if (area == ((void *) ~0))
- return NULL; /* Not enough system memory */
- add_new_area(area, area_size, mem_pool);
- /* Rounding up the requested size and calculating fl and sl */
- MAPPING_SEARCH(&size, &fl, &sl);
- /* Searching a free block */
- b = FIND_SUITABLE_BLOCK(tlsf, &fl, &sl);
- }
-#endif
if (!b)
return NULL; /* Not found */
More information about the Xenomai
mailing list