Move to kernel style SPDX license identifiers
[babeltrace.git] / src / lib / object-pool.c
1 /*
2 * SPDX-License-Identifier: MIT
3 *
4 * Copyright (c) 2018 Philippe Proulx <pproulx@efficios.com>
5 */
6
7 #define BT_LOG_TAG "LIB/OBJECT-POOL"
8 #include "lib/logging.h"
9
10 #include <stdint.h>
11 #include "common/assert.h"
12 #include "lib/assert-pre.h"
13 #include "lib/object-pool.h"
14
15 int bt_object_pool_initialize(struct bt_object_pool *pool,
16 bt_object_pool_new_object_func new_object_func,
17 bt_object_pool_destroy_object_func destroy_object_func,
18 void *data)
19 {
20 int ret = 0;
21
22 BT_ASSERT(pool);
23 BT_ASSERT(new_object_func);
24 BT_ASSERT(destroy_object_func);
25 BT_LOGD("Initializing object pool: addr=%p, data-addr=%p",
26 pool, data);
27 pool->objects = g_ptr_array_new();
28 if (!pool->objects) {
29 BT_LIB_LOGE_APPEND_CAUSE("Failed to allocate a GPtrArray.");
30 goto error;
31 }
32
33 pool->funcs.new_object = new_object_func;
34 pool->funcs.destroy_object = destroy_object_func;
35 pool->data = data;
36 pool->size = 0;
37 BT_LIB_LOGD("Initialized object pool: %!+o", pool);
38 goto end;
39
40 error:
41 bt_object_pool_finalize(pool);
42 ret = -1;
43
44 end:
45 return ret;
46 }
47
48 void bt_object_pool_finalize(struct bt_object_pool *pool)
49 {
50 uint64_t i;
51
52 BT_ASSERT(pool);
53 BT_LIB_LOGD("Finalizing object pool: %!+o", pool);
54
55 if (pool->objects) {
56 for (i = 0; i < pool->size; i++) {
57 void *obj = pool->objects->pdata[i];
58
59 if (obj) {
60 pool->funcs.destroy_object(obj, pool->data);
61 }
62 }
63
64 g_ptr_array_free(pool->objects, TRUE);
65 pool->objects = NULL;
66 }
67 }
This page took 0.030103 seconds and 4 git commands to generate.