lib: fully detach CTF IR and CTF writer implementations
[babeltrace.git] / lib / ctf-ir / stream.c
index 2787230c873170bbd454eee8dd90060b0617a45e..2e7c2b4ed309b94634aa854c895f48b7726279f8 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>
 BT_HIDDEN
 void bt_stream_common_finalize(struct bt_stream_common *stream)
 {
-       int i;
-
        BT_LOGD("Finalizing common stream object: addr=%p, name=\"%s\"",
                stream, bt_stream_common_get_name(stream));
 
-       /* Call destroy listeners in reverse registration order */
-       for (i = stream->destroy_listeners->len - 1; i >= 0; i--) {
-               struct bt_stream_common_destroy_listener *listener =
-                       &g_array_index(stream->destroy_listeners,
-                               struct bt_stream_common_destroy_listener, i);
-
-               BT_LOGD("Calling destroy listener: func=%p, data=%p, index=%d",
-                       listener->func, listener->data, i);
-               listener->func(stream, listener->data);
-       }
-
        if (stream->name) {
                g_string_free(stream->name, TRUE);
        }
-
-       if (stream->destroy_listeners) {
-               g_array_free(stream->destroy_listeners, TRUE);
-       }
 }
 
 static
@@ -78,6 +62,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);
 }
@@ -91,7 +76,7 @@ int bt_stream_common_initialize(
        int ret = 0;
        struct bt_trace_common *trace = NULL;
 
-       bt_object_init(stream, release_func);
+       bt_object_init_shared_with_parent(&stream->base, release_func);
 
        if (!stream_class) {
                BT_LOGW_STR("Invalid parameter: stream class is NULL.");
@@ -140,15 +125,9 @@ int bt_stream_common_initialize(
         * Acquire reference to parent since stream will become publicly
         * reachable; it needs its parent to remain valid.
         */
-       bt_object_set_parent(stream, trace);
+       bt_object_set_parent(&stream->base, &trace->base);
        stream->stream_class = stream_class;
        stream->id = (int64_t) id;
-       stream->destroy_listeners = g_array_new(FALSE, TRUE,
-               sizeof(struct bt_stream_common_destroy_listener));
-       if (!stream->destroy_listeners) {
-               BT_LOGE_STR("Failed to allocate a GArray.");
-               goto error;
-       }
 
        if (name) {
                stream->name = g_string_new(name);
@@ -171,6 +150,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,
@@ -224,6 +209,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;
@@ -274,44 +268,3 @@ int64_t bt_stream_get_id(struct bt_stream *stream)
 {
        return bt_stream_common_get_id(BT_TO_COMMON(stream));
 }
-
-BT_HIDDEN
-void bt_stream_common_add_destroy_listener(struct bt_stream_common *stream,
-               bt_stream_common_destroy_listener_func func, void *data)
-{
-       struct bt_stream_common_destroy_listener listener;
-
-       BT_ASSERT(stream);
-       BT_ASSERT(func);
-       listener.func = func;
-       listener.data = data;
-       g_array_append_val(stream->destroy_listeners, listener);
-       BT_LOGV("Added stream destroy listener: stream-addr=%p, "
-               "stream-name=\"%s\", func=%p, data=%p",
-               stream, bt_stream_common_get_name(stream), func, data);
-}
-
-BT_HIDDEN
-void bt_stream_common_remove_destroy_listener(struct bt_stream_common *stream,
-               bt_stream_common_destroy_listener_func func, void *data)
-{
-       size_t i;
-
-       BT_ASSERT(stream);
-       BT_ASSERT(func);
-
-       for (i = 0; i < stream->destroy_listeners->len; i++) {
-               struct bt_stream_common_destroy_listener *listener =
-                       &g_array_index(stream->destroy_listeners,
-                               struct bt_stream_common_destroy_listener, i);
-
-               if (listener->func == func && listener->data == data) {
-                       g_array_remove_index(stream->destroy_listeners, i);
-                       i--;
-                       BT_LOGV("Removed stream destroy listener: stream-addr=%p, "
-                               "stream-name=\"%s\", func=%p, data=%p",
-                               stream, bt_stream_common_get_name(stream),
-                               func, data);
-               }
-       }
-}
This page took 0.024805 seconds and 4 git commands to generate.