ir: add bt_ctf_event_set_packet()
authorPhilippe Proulx <eeppeliteloop@gmail.com>
Fri, 12 Feb 2016 23:55:50 +0000 (18:55 -0500)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Fri, 19 Feb 2016 23:10:02 +0000 (18:10 -0500)
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
formats/ctf/ir/event.c
formats/ctf/ir/packet.c
include/babeltrace/ctf-ir/event-internal.h
include/babeltrace/ctf-ir/event.h

index 6d8f57b3e076f7da718e6b1cdd9c87eab80780bb..d18b1d7a0582750b4c386febca5ed9ea90e6dd68 100644 (file)
@@ -35,6 +35,7 @@
 #include <babeltrace/ctf-ir/stream-class-internal.h>
 #include <babeltrace/ctf-ir/trace-internal.h>
 #include <babeltrace/ctf-ir/validation-internal.h>
+#include <babeltrace/ctf-ir/packet-internal.h>
 #include <babeltrace/ctf-ir/utils.h>
 #include <babeltrace/ref.h>
 #include <babeltrace/ctf-ir/attributes-internal.h>
@@ -569,6 +570,7 @@ void bt_ctf_event_destroy(struct bt_object *obj)
        bt_put(event->stream_event_context);
        bt_put(event->context_payload);
        bt_put(event->fields_payload);
+       bt_put(event->packet);
        g_free(event);
 }
 
@@ -786,3 +788,38 @@ error:
        BT_PUT(copy);
        return copy;
 }
+
+int bt_ctf_event_set_packet(struct bt_ctf_event *event,
+               struct bt_ctf_packet *packet)
+{
+       struct bt_ctf_stream *stream = NULL;
+       int ret = 0;
+
+       if (!event || !packet) {
+               ret = -1;
+               goto end;
+       }
+
+       /*
+        * Make sure the new packet was created by this event's
+        * stream, if it is set.
+        */
+       stream = bt_ctf_event_get_stream(event);
+       if (stream) {
+               if (packet->stream != stream) {
+                       ret = -1;
+                       goto end;
+               }
+       } else {
+               /* Set the event's parent to the packet's stream */
+               bt_object_set_parent(event, packet->stream);
+       }
+
+       bt_put(event->packet);
+       event->packet = bt_get(packet);
+
+end:
+       BT_PUT(stream);
+
+       return ret;
+}
index 76a2f0455752b63f8e1cf558a1d32a860746f60c..c74b3833163bd026e9d9684f1da13ab1aec930b6 100644 (file)
@@ -134,15 +134,10 @@ BT_HIDDEN
 void bt_ctf_packet_freeze(struct bt_ctf_packet *packet)
 {
        if (!packet) {
-               goto end;
+               return;
        }
 
-       bt_ctf_field_freeze(packet->header);
-       bt_ctf_field_freeze(packet->context);
        packet->frozen = 1;
-
-end:
-       return;
 }
 
 static
@@ -157,7 +152,7 @@ void bt_ctf_packet_destroy(struct bt_object *obj)
        g_free(packet);
 }
 
-extern struct bt_ctf_packet *bt_ctf_packet_create(
+struct bt_ctf_packet *bt_ctf_packet_create(
                struct bt_ctf_stream *stream)
 {
        struct bt_ctf_packet *packet = NULL;
index f381be8d9c49626325cf21221afabdf849a3ec89..a0b83ea633fe1b98890362ab3831695b3f6c79d3 100644 (file)
 #include <babeltrace/ctf/types.h>
 #include <babeltrace/ctf-ir/stream-class.h>
 #include <babeltrace/ctf-ir/stream.h>
+#include <babeltrace/ctf-ir/packet.h>
 #include <babeltrace/object-internal.h>
 #include <glib.h>
 
 struct bt_ctf_event {
        struct bt_object base;
        struct bt_ctf_event_class *event_class;
+       struct bt_ctf_packet *packet;
        struct bt_ctf_field *event_header;
        struct bt_ctf_field *stream_event_context;
        struct bt_ctf_field *context_payload;
index 5b2e6f995d95fb852a9691a1f98c813ac4bce817..4770f5eadca1f8b6474890fab0ab2c1387de9a53 100644 (file)
@@ -43,6 +43,7 @@ struct bt_ctf_event;
 struct bt_ctf_field;
 struct bt_ctf_field_type;
 struct bt_ctf_stream_class;
+struct bt_ctf_packet;
 
 /*
  * bt_ctf_event_create: instanciate an event.
@@ -254,6 +255,9 @@ extern int bt_ctf_event_set_stream_event_context(struct bt_ctf_event *event,
  */
 extern struct bt_ctf_event *bt_ctf_event_copy(struct bt_ctf_event *event);
 
+extern int bt_ctf_event_set_packet(struct bt_ctf_event *event,
+               struct bt_ctf_packet *packet);
+
 /*
  * bt_ctf_event_get and bt_ctf_event_put: increment and decrement
  * the event's reference count.
This page took 0.027137 seconds and 4 git commands to generate.