writer: create event classes lazily
authorJulien Desfossez <jdesfossez@efficios.com>
Wed, 15 Feb 2017 19:10:46 +0000 (14:10 -0500)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Sun, 28 May 2017 16:57:39 +0000 (12:57 -0400)
Instead of copying all the event classes when we copy the stream
classes, we now create them only when needed. That way, we can use this
plugin in live where new events can get created after the trace has
already been opened.

Signed-off-by: Julien Desfossez <jdesfossez@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
plugins/writer/write.c

index e6684d15efe5101b5217539d3a6629d8ea078ed1..5f65ddcb40c333c8a1adff18b40ea7c93097d00f 100644 (file)
@@ -87,15 +87,6 @@ struct bt_ctf_stream_class *insert_new_stream_class(
                goto end_put_writer_trace;
        }
 
-       ret = ctf_copy_event_classes(writer_component->err, stream_class,
-                       writer_stream_class);
-       if (ret != BT_COMPONENT_STATUS_OK) {
-               fprintf(writer_component->err, "[error] Failed to copy event classes\n");
-               fprintf(writer_component->err, "[error] %s in %s:%d\n", __func__, __FILE__,
-                               __LINE__);
-               goto error;
-       }
-
        g_hash_table_insert(writer_component->stream_class_map,
                        (gpointer) stream_class, writer_stream_class);
 
@@ -473,10 +464,22 @@ enum bt_component_status writer_output_event(
        writer_event_class = get_event_class(writer_component,
                        writer_stream_class, event_class);
        if (!writer_event_class) {
-               ret = BT_COMPONENT_STATUS_ERROR;
-               fprintf(writer_component->err, "[error] %s in %s:%d\n", __func__,
-                               __FILE__, __LINE__);
-               goto end_put_writer_stream_class;
+               writer_event_class = ctf_copy_event_class(writer_component->err,
+                               event_class);
+               if (!writer_event_class) {
+                       ret = BT_COMPONENT_STATUS_ERROR;
+                       fprintf(writer_component->err, "[error] %s in %s:%d\n",
+                                       __func__, __FILE__, __LINE__);
+                       goto end_put_writer_stream_class;
+               }
+               int_ret = bt_ctf_stream_class_add_event_class(
+                               writer_stream_class, writer_event_class);
+               if (int_ret) {
+                       ret = BT_COMPONENT_STATUS_ERROR;
+                       fprintf(writer_component->err, "[error] %s in %s:%d\n",
+                                       __func__, __FILE__, __LINE__);
+                       goto end_put_writer_stream_class;
+               }
        }
 
        writer_event = ctf_copy_event(writer_component->err, event,
This page took 0.024852 seconds and 4 git commands to generate.