X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Flib%2Fobject-pool.h;h=04731c5d51085509144e61a4d7acf85a318dd8ce;hb=30348e63b890ff2d25deb9c562748e7e94c5446c;hp=24d1e540aeaf53132c5090b45baed88c6d3dd5e1;hpb=c9ecaa780cbfa7020b33fecb6910b5825b46af2c;p=babeltrace.git diff --git a/src/lib/object-pool.h b/src/lib/object-pool.h index 24d1e540..04731c5d 100644 --- a/src/lib/object-pool.h +++ b/src/lib/object-pool.h @@ -51,8 +51,13 @@ #include #include "lib/object.h" +/* Protection: this file uses BT_LIB_LOG*() macros directly */ +#ifndef BT_LIB_LOG_SUPPORTED +# error Please include "lib/logging.h" before including this file. +#endif + typedef void *(*bt_object_pool_new_object_func)(void *data); -typedef void *(*bt_object_pool_destroy_object_func)(void *obj, void *data); +typedef void (*bt_object_pool_destroy_object_func)(void *obj, void *data); struct bt_object_pool { /* @@ -83,6 +88,7 @@ struct bt_object_pool { /* * Initializes an object pool which is already allocated. */ +BT_HIDDEN int bt_object_pool_initialize(struct bt_object_pool *pool, bt_object_pool_new_object_func new_object_func, bt_object_pool_destroy_object_func destroy_object_func, @@ -91,6 +97,7 @@ int bt_object_pool_initialize(struct bt_object_pool *pool, /* * Finalizes an object pool without deallocating it. */ +BT_HIDDEN void bt_object_pool_finalize(struct bt_object_pool *pool); /* @@ -106,12 +113,9 @@ void *bt_object_pool_create_object(struct bt_object_pool *pool) { struct bt_object *obj; - BT_ASSERT(pool); - -#ifdef BT_LOGT + BT_ASSERT_DBG(pool); BT_LOGT("Creating object from pool: pool-addr=%p, pool-size=%zu, pool-cap=%u", pool, pool->size, pool->objects->len); -#endif if (pool->size > 0) { /* Pick one from the pool */ @@ -122,19 +126,13 @@ void *bt_object_pool_create_object(struct bt_object_pool *pool) } /* Pool is empty: create a brand new object */ -#ifdef BT_LOGD BT_LOGD("Pool is empty: allocating new object: pool-addr=%p", pool); -#endif - obj = pool->funcs.new_object(pool->data); end: -#ifdef BT_LOGT BT_LOGT("Created one object from pool: pool-addr=%p, obj-addr=%p", pool, obj); -#endif - return obj; } @@ -148,21 +146,16 @@ void bt_object_pool_recycle_object(struct bt_object_pool *pool, void *obj) { struct bt_object *bt_obj = obj; - BT_ASSERT(pool); - BT_ASSERT(obj); - -#ifdef BT_LOGT + BT_ASSERT_DBG(pool); + BT_ASSERT_DBG(obj); BT_LOGT("Recycling object: pool-addr=%p, pool-size=%zu, pool-cap=%u, obj-addr=%p", pool, pool->size, pool->objects->len, obj); -#endif if (pool->size == pool->objects->len) { /* Backing array is full: make place for recycled object */ -#ifdef BT_LOGD BT_LOGD("Object pool is full: increasing object pool capacity: " "pool-addr=%p, old-pool-cap=%u, new-pool-cap=%u", pool, pool->objects->len, pool->objects->len + 1); -#endif g_ptr_array_set_size(pool->objects, pool->size + 1); } @@ -172,11 +165,8 @@ void bt_object_pool_recycle_object(struct bt_object_pool *pool, void *obj) /* Back to the pool */ pool->objects->pdata[pool->size] = obj; pool->size++; - -#ifdef BT_LOGT BT_LOGT("Recycled object: pool-addr=%p, pool-size=%zu, pool-cap=%u, obj-addr=%p", pool, pool->size, pool->objects->len, obj); -#endif } #endif /* BABELTRACE_OBJECT_POOL_INTERNAL_H */