mirror of
https://github.com/espressif/tlsf.git
synced 2025-12-05 15:15:47 +00:00
change(tlsf): Add return value to tlsf_walker
This commit adds a return boolean value to the tlsf_walker function allowing users to interrupt the traversal of the pool when returning from any call to the tlsf_walker.
This commit is contained in:
12
tlsf.c
12
tlsf.c
@@ -659,7 +659,7 @@ typedef struct integrity_t
|
|||||||
|
|
||||||
#define tlsf_insist(x) { if (!(x)) { status--; } }
|
#define tlsf_insist(x) { if (!(x)) { status--; } }
|
||||||
|
|
||||||
static void integrity_walker(void* ptr, size_t size, int used, void* user)
|
static bool integrity_walker(void* ptr, size_t size, int used, void* user)
|
||||||
{
|
{
|
||||||
block_header_t* block = block_from_ptr(ptr);
|
block_header_t* block = block_from_ptr(ptr);
|
||||||
integrity_t* integ = tlsf_cast(integrity_t*, user);
|
integrity_t* integ = tlsf_cast(integrity_t*, user);
|
||||||
@@ -691,6 +691,8 @@ static void integrity_walker(void* ptr, size_t size, int used, void* user)
|
|||||||
|
|
||||||
integ->prev_status = this_status;
|
integ->prev_status = this_status;
|
||||||
integ->status += status;
|
integ->status += status;
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -750,10 +752,11 @@ int tlsf_check(tlsf_t tlsf)
|
|||||||
|
|
||||||
#undef tlsf_insist
|
#undef tlsf_insist
|
||||||
|
|
||||||
static void default_walker(void* ptr, size_t size, int used, void* user)
|
static bool default_walker(void* ptr, size_t size, int used, void* user)
|
||||||
{
|
{
|
||||||
(void)user;
|
(void)user;
|
||||||
printf("\t%p %s size: %x (%p)\n", ptr, used ? "used" : "free", (unsigned int)size, block_from_ptr(ptr));
|
printf("\t%p %s size: %x (%p)\n", ptr, used ? "used" : "free", (unsigned int)size, block_from_ptr(ptr));
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void tlsf_walk_pool(pool_t pool, tlsf_walker walker, void* user)
|
void tlsf_walk_pool(pool_t pool, tlsf_walker walker, void* user)
|
||||||
@@ -762,9 +765,10 @@ void tlsf_walk_pool(pool_t pool, tlsf_walker walker, void* user)
|
|||||||
block_header_t* block =
|
block_header_t* block =
|
||||||
offset_to_block(pool, -(int)block_header_overhead);
|
offset_to_block(pool, -(int)block_header_overhead);
|
||||||
|
|
||||||
while (block && !block_is_last(block))
|
bool ret_val = true;
|
||||||
|
while (block && !block_is_last(block) && ret_val == true)
|
||||||
{
|
{
|
||||||
pool_walker(
|
ret_val = pool_walker(
|
||||||
block_to_ptr(block),
|
block_to_ptr(block),
|
||||||
block_size(block),
|
block_size(block),
|
||||||
!block_is_free(block),
|
!block_is_free(block),
|
||||||
|
|||||||
2
tlsf.h
2
tlsf.h
@@ -58,7 +58,7 @@ size_t tlsf_alloc_overhead(void);
|
|||||||
size_t tlsf_fit_size(tlsf_t tlsf, size_t size);
|
size_t tlsf_fit_size(tlsf_t tlsf, size_t size);
|
||||||
|
|
||||||
/* Debugging. */
|
/* Debugging. */
|
||||||
typedef void (*tlsf_walker)(void* ptr, size_t size, int used, void* user);
|
typedef bool (*tlsf_walker)(void* ptr, size_t size, int used, void* user);
|
||||||
void tlsf_walk_pool(pool_t pool, tlsf_walker walker, void* user);
|
void tlsf_walk_pool(pool_t pool, tlsf_walker walker, void* user);
|
||||||
/* Returns nonzero if any internal consistency check fails. */
|
/* Returns nonzero if any internal consistency check fails. */
|
||||||
int tlsf_check(tlsf_t tlsf);
|
int tlsf_check(tlsf_t tlsf);
|
||||||
|
|||||||
Reference in New Issue
Block a user