lib: add internal object pool API and use it; adapt plugins/tests
[babeltrace.git] / lib / ctf-ir / stream.c
index 70030454d6956c3cdbf68668ce5dc118e23f80d1..4eb05a8b6365019e05818c7e6652ce2d18d21af3 100644 (file)
@@ -36,6 +36,7 @@
 #include <babeltrace/ctf-ir/stream-class-internal.h>
 #include <babeltrace/ctf-ir/trace.h>
 #include <babeltrace/ctf-ir/trace-internal.h>
+#include <babeltrace/ctf-ir/packet-internal.h>
 #include <babeltrace/ref.h>
 #include <babeltrace/compiler-internal.h>
 #include <babeltrace/align-internal.h>
@@ -80,6 +81,7 @@ void bt_stream_destroy(struct bt_object *obj)
 
        BT_LOGD("Destroying stream object: addr=%p, name=\"%s\"",
                stream, bt_stream_get_name(stream));
+       bt_object_pool_finalize(&stream->packet_pool);
        bt_stream_common_finalize((void *) obj);
        g_free(stream);
 }
@@ -173,6 +175,12 @@ end:
        return ret;
 }
 
+static
+void bt_stream_free_packet(struct bt_packet *packet, struct bt_stream *stream)
+{
+       bt_packet_destroy(packet);
+}
+
 static
 struct bt_stream *bt_stream_create_with_id_no_check(
                struct bt_stream_class *stream_class,
@@ -226,6 +234,15 @@ struct bt_stream *bt_stream_create_with_id_no_check(
                goto error;
        }
 
+       ret = bt_object_pool_initialize(&stream->packet_pool,
+               (bt_object_pool_new_object_func) bt_packet_new,
+               (bt_object_pool_destroy_object_func) bt_stream_free_packet,
+               stream);
+       if (ret) {
+               BT_LOGE("Failed to initialize packet pool: ret=%d", ret);
+               goto error;
+       }
+
        g_ptr_array_add(trace->common.streams, stream);
        BT_LOGD("Created stream object: addr=%p", stream);
        goto end;
This page took 0.024749 seconds and 4 git commands to generate.