diff --git a/src/fast_allocator.c b/src/fast_allocator.c index dd7c793..da6b6a0 100644 --- a/src/fast_allocator.c +++ b/src/fast_allocator.c @@ -415,7 +415,7 @@ int fast_allocator_retry_reclaim(struct fast_allocator_context *acontext, return EAGAIN; } - for (i=0; i< acontext->allocator_array.count; i++) + for (i=0; iallocator_array.count; i++) { if (fast_mblock_reclaim(&acontext->allocator_array. allocators[i]->mblock, 0, &reclaim_count, NULL) == 0) diff --git a/src/locked_list.h b/src/locked_list.h index 1c49067..abe0ddb 100644 --- a/src/locked_list.h +++ b/src/locked_list.h @@ -48,6 +48,15 @@ extern "C" { PTHREAD_MUTEX_UNLOCK(&list->lock); } + static inline int locked_list_empty(FCLockedList *list) + { + int empty; + PTHREAD_MUTEX_LOCK(&list->lock); + empty = fc_list_empty(&list->head); + PTHREAD_MUTEX_UNLOCK(&list->lock); + return empty; + } + static inline int locked_list_count(FCLockedList *list) { int count; @@ -57,6 +66,24 @@ extern "C" { return count; } +#define locked_list_first_entry(list, type, member, var) \ + PTHREAD_MUTEX_LOCK(&(list)->lock); \ + var = fc_list_first_entry(&(list)->head, type, member); \ + PTHREAD_MUTEX_UNLOCK(&(list)->lock) + +#define locked_list_last_entry(list, type, member, var) \ + PTHREAD_MUTEX_LOCK(&(list)->lock); \ + var = fc_list_last_entry(&(list)->head, type, member); \ + PTHREAD_MUTEX_UNLOCK(&(list)->lock) + +#define locked_list_pop(list, type, member, var) \ + PTHREAD_MUTEX_LOCK(&(list)->lock); \ + var = fc_list_first_entry(&(list)->head, type, member); \ + if (var != NULL) { \ + fc_list_del_init(&var->member); \ + } \ + PTHREAD_MUTEX_UNLOCK(&(list)->lock) + #ifdef __cplusplus } #endif