From: Philippe Proulx Date: Fri, 12 Feb 2016 23:55:50 +0000 (-0500) Subject: ir: add bt_ctf_event_set_packet() X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=commitdiff_plain;h=5c3b707de4e677d874c3978b0280e3f2600a5eef ir: add bt_ctf_event_set_packet() Signed-off-by: Philippe Proulx Signed-off-by: Jérémie Galarneau --- diff --git a/formats/ctf/ir/event.c b/formats/ctf/ir/event.c index 6d8f57b3..d18b1d7a 100644 --- a/formats/ctf/ir/event.c +++ b/formats/ctf/ir/event.c @@ -35,6 +35,7 @@ #include #include #include +#include #include #include #include @@ -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; +} diff --git a/formats/ctf/ir/packet.c b/formats/ctf/ir/packet.c index 76a2f045..c74b3833 100644 --- a/formats/ctf/ir/packet.c +++ b/formats/ctf/ir/packet.c @@ -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; diff --git a/include/babeltrace/ctf-ir/event-internal.h b/include/babeltrace/ctf-ir/event-internal.h index f381be8d..a0b83ea6 100644 --- a/include/babeltrace/ctf-ir/event-internal.h +++ b/include/babeltrace/ctf-ir/event-internal.h @@ -34,12 +34,14 @@ #include #include #include +#include #include #include 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; diff --git a/include/babeltrace/ctf-ir/event.h b/include/babeltrace/ctf-ir/event.h index 5b2e6f99..4770f5ea 100644 --- a/include/babeltrace/ctf-ir/event.h +++ b/include/babeltrace/ctf-ir/event.h @@ -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.