Fix: lib: pass down API function name to some helpers
[babeltrace.git] / src / lib / object-pool.c
CommitLineData
312c056a 1/*
0235b0db 2 * SPDX-License-Identifier: MIT
312c056a 3 *
0235b0db 4 * Copyright (c) 2018 Philippe Proulx <pproulx@efficios.com>
312c056a
PP
5 */
6
350ad6c1 7#define BT_LOG_TAG "LIB/OBJECT-POOL"
c2d9d9cf 8#include "lib/logging.h"
312c056a
PP
9
10#include <stdint.h>
578e048b 11#include "common/assert.h"
d98421f2 12#include "lib/assert-cond.h"
578e048b 13#include "lib/object-pool.h"
312c056a
PP
14
15int 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
701406be 22 BT_ASSERT(pool);
312c056a
PP
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) {
870631a2 29 BT_LIB_LOGE_APPEND_CAUSE("Failed to allocate a GPtrArray.");
312c056a
PP
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
40error:
701406be 41 bt_object_pool_finalize(pool);
312c056a
PP
42 ret = -1;
43
44end:
45 return ret;
46}
47
48void 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.069472 seconds and 4 git commands to generate.