88 ocs_pool_alloc(ocs_os_handle_t os, uint32_t size, uint32_t count, uint32_t use_lock)
93 pool = ocs_malloc(os,
sizeof(*pool), OCS_M_ZERO | OCS_M_NOWAIT);
99 pool->use_lock = use_lock;
100 if (pool->use_lock) {
101 ocs_lock_init(os, &pool->lock,
"ocs_pool:%p", pool);
108 if (pool->a == NULL) {
114 for (i = 0; i < count; i++) {
137 if (pool->use_lock) {
138 ocs_lock(&pool->lock);
153 for (i = 0; i < count; i++) {
157 if (pool->use_lock) {
158 ocs_unlock(&pool->lock);
176 if (pool->a != NULL) {
179 if (pool->use_lock) {
180 ocs_lock_free(&pool->lock);
182 ocs_free(pool->os, pool,
sizeof(*pool));
202 if (pool->use_lock) {
203 ocs_lock(&pool->lock);
213 if (pool->use_lock) {
214 ocs_unlock(&pool->lock);
234 if (pool->use_lock) {
235 ocs_lock(&pool->lock);
245 if (pool->use_lock) {
246 ocs_unlock(&pool->lock);
265 if (pool->use_lock) {
266 ocs_lock(&pool->lock);
276 if (pool->use_lock) {
277 ocs_unlock(&pool->lock);
294 if (pool->use_lock) {
295 ocs_lock(&pool->lock);
298 if (pool->use_lock) {
299 ocs_unlock(&pool->lock);
340 if (pool->use_lock) {
341 ocs_lock(&pool->lock);
348 if (pool->use_lock) {
349 ocs_unlock(&pool->lock);
ocs_list_t ocs_list_link_t
void * ocs_pool_get(ocs_pool_t *pool)
Allocate a memory pool item.
uint32_t ocs_pool_get_freelist_count(ocs_pool_t *pool)
Return count of free objects in a pool.
static int32_t ocs_list_empty(ocs_list_t *list)
Test if a list is empty.
void ocs_pool_put_head(ocs_pool_t *pool, void *item)
free memory pool item
void ocs_pool_put(ocs_pool_t *pool, void *item)
free memory pool item
ocs_pool_t * ocs_pool_alloc(ocs_os_handle_t os, uint32_t size, uint32_t count, uint32_t use_lock)
Allocate a memory pool.
uint32_t ocs_array_get_size(ocs_array_t *array)
Return size of array elements in bytes.
void ocs_pool_free(ocs_pool_t *pool)
Free a previously allocated memory pool.
#define ocs_list_init(head, type, link)
ocs_array_t * ocs_array_alloc(ocs_os_handle_t os, uint32_t size, uint32_t count)
Allocate an array object.
void ocs_array_free(ocs_array_t *array)
Free an array object.
uint32_t ocs_array_get_count(ocs_array_t *array)
Return number of elements in an array.
void * ocs_pool_get_instance(ocs_pool_t *pool, uint32_t idx)
Return item given an index.
void ocs_pool_reset(ocs_pool_t *pool)
Reset a memory pool.
static void ocs_list_add_tail(ocs_list_t *list, void *item)
Add an item to the tail of the list.
#define ocs_list_remove_head(list)
Remove and return an item from the head of the list.
static void ocs_list_add_head(ocs_list_t *list, void *item)
Add an item to the head of the list.
#define ocs_list_foreach(list, item)
Iterate a linked list.
void * ocs_array_get(ocs_array_t *array, uint32_t idx)
Return reference to an element of an array object.
uint32_t ocs_pool_get_count(ocs_pool_t *pool)
Return memory pool item count.