X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;ds=sidebyside;f=lib%2Fctf-ir%2Fstream.c;h=4eb05a8b6365019e05818c7e6652ce2d18d21af3;hb=312c056ae3d374b253fa0cfe5ed576c0b0e5e569;hp=2787230c873170bbd454eee8dd90060b0617a45e;hpb=094ff7c009937bb23c056333baffe734308a6b06;p=babeltrace.git diff --git a/lib/ctf-ir/stream.c b/lib/ctf-ir/stream.c index 2787230c..4eb05a8b 100644 --- a/lib/ctf-ir/stream.c +++ b/lib/ctf-ir/stream.c @@ -36,6 +36,7 @@ #include #include #include +#include #include #include #include @@ -52,14 +53,16 @@ void bt_stream_common_finalize(struct bt_stream_common *stream) 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->destroy_listeners) { + 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) { @@ -78,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); } @@ -171,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, @@ -224,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;