X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=formats%2Fctf%2Fir%2Fstream.c;h=4339010e1846f1b8a7fbbcbbac9a01b8e24e0a79;hb=b25d20adeabe34126cacaf6b7f93883c1c98ad90;hp=cc5548b548033345239bd1e4c0234e2c116f3460;hpb=09840de5d022697671dafe2bed427fa5c09b40b9;p=babeltrace.git diff --git a/formats/ctf/ir/stream.c b/formats/ctf/ir/stream.c index cc5548b5..4339010e 100644 --- a/formats/ctf/ir/stream.c +++ b/formats/ctf/ir/stream.c @@ -30,8 +30,8 @@ #include #include #include -#include -#include +#include +#include #include #include #include @@ -68,7 +68,7 @@ int set_packet_header_magic(struct bt_ctf_stream *stream) assert(magic_field_type); if (bt_ctf_field_type_get_type_id(magic_field_type) != - CTF_TYPE_INTEGER) { + BT_CTF_TYPE_ID_INTEGER) { /* Magic field is not an integer. Not an error, skip. */ goto end; } @@ -119,7 +119,7 @@ int set_packet_header_uuid(struct bt_ctf_stream *stream) uuid_field_type = bt_ctf_field_get_type(uuid_field); assert(uuid_field_type); if (bt_ctf_field_type_get_type_id(uuid_field_type) != - CTF_TYPE_ARRAY) { + BT_CTF_TYPE_ID_ARRAY) { /* UUID field is not an array. Not an error, skip. */ goto end; } @@ -136,7 +136,7 @@ int set_packet_header_uuid(struct bt_ctf_stream *stream) uuid_field_type); assert(element_field_type); if (bt_ctf_field_type_get_type_id(element_field_type) != - CTF_TYPE_INTEGER) { + BT_CTF_TYPE_ID_INTEGER) { /* UUID array elements are not integers. Not an error, skip */ goto end; } @@ -192,7 +192,7 @@ int set_packet_header_stream_id(struct bt_ctf_stream *stream) stream_id_field_type = bt_ctf_field_get_type(stream_id_field); assert(stream_id_field_type); if (bt_ctf_field_type_get_type_id(stream_id_field_type) != - CTF_TYPE_INTEGER) { + BT_CTF_TYPE_ID_INTEGER) { /* stream_id field is not an integer. Not an error, skip. */ goto end; } @@ -281,20 +281,6 @@ struct bt_ctf_stream *bt_ctf_stream_create( goto error; } - /* - * A stream class may not have a stream event context defined - * in which case this stream will never have a stream_event_context - * member since, after a stream's creation, the parent stream class - * is "frozen" (immutable). - */ - if (stream_class->event_context_type) { - stream->event_context = bt_ctf_field_create( - stream_class->event_context_type); - if (!stream->event_context) { - goto error; - } - } - /* Initialize events_discarded */ ret = set_structure_field_integer(stream->packet_context, "events_discarded", 0); @@ -310,13 +296,6 @@ struct bt_ctf_stream *bt_ctf_stream_create( if (!stream->events) { goto error; } - if (stream_class->event_context_type) { - stream->event_contexts = g_ptr_array_new_with_free_func( - (GDestroyNotify) bt_put); - if (!stream->event_contexts) { - goto error; - } - } /* A trace is not allowed to have a NULL packet header */ assert(trace->packet_header_type); @@ -383,7 +362,8 @@ int bt_ctf_stream_get_discarded_events_count( struct bt_ctf_field *events_discarded_field = NULL; struct bt_ctf_field_type *events_discarded_field_type = NULL; - if (!stream || !count || !stream->packet_context) { + if (!stream || !count || !stream->packet_context || + stream->pos.fd < 0) { ret = -1; goto end; } @@ -446,7 +426,7 @@ void bt_ctf_stream_append_discarded_events(struct bt_ctf_stream *stream, struct bt_ctf_field *events_discarded_field = NULL; struct bt_ctf_field_type *events_discarded_field_type = NULL; - if (!stream || !stream->packet_context) { + if (!stream || !stream->packet_context || stream->pos.fd < 0) { goto end; } @@ -498,9 +478,8 @@ int bt_ctf_stream_append_event(struct bt_ctf_stream *stream, struct bt_ctf_event *event) { int ret = 0; - struct bt_ctf_field *event_context_copy = NULL; - if (!stream || !event) { + if (!stream || !event || stream->pos.fd < 0) { ret = -1; goto end; } @@ -511,32 +490,16 @@ int bt_ctf_stream_append_event(struct bt_ctf_stream *stream, goto end; } - /* Make sure the event's payload is set */ + /* Make sure the various scopes of the event are set */ ret = bt_ctf_event_validate(event); if (ret) { goto end; } - /* Sample the current stream event context by copying it */ - if (stream->event_context) { - /* Make sure the event context's payload is set */ - ret = bt_ctf_field_validate(stream->event_context); - if (ret) { - goto end; - } - - event_context_copy = bt_ctf_field_copy(stream->event_context); - if (!event_context_copy) { - ret = -1; - goto end; - } - } - - /* Save the new event along with its associated stream event context */ + /* Save the new event and freeze it */ + bt_ctf_event_freeze(event); g_ptr_array_add(stream->events, event); - if (event_context_copy) { - g_ptr_array_add(stream->event_contexts, event_context_copy); - } + /* * Event had to hold a reference to its event class as long as it wasn't * part of the same trace hierarchy. From now on, the event and its @@ -560,7 +523,7 @@ struct bt_ctf_field *bt_ctf_stream_get_packet_context( { struct bt_ctf_field *packet_context = NULL; - if (!stream) { + if (!stream || stream->pos.fd < 0) { goto end; } @@ -578,7 +541,7 @@ int bt_ctf_stream_set_packet_context(struct bt_ctf_stream *stream, int ret = 0; struct bt_ctf_field_type *field_type; - if (!stream || !field) { + if (!stream || !field || stream->pos.fd < 0) { ret = -1; goto end; } @@ -598,55 +561,12 @@ end: return ret; } -struct bt_ctf_field *bt_ctf_stream_get_event_context( - struct bt_ctf_stream *stream) -{ - struct bt_ctf_field *event_context = NULL; - - if (!stream) { - goto end; - } - - event_context = stream->event_context; - if (event_context) { - bt_get(event_context); - } -end: - return event_context; -} - -int bt_ctf_stream_set_event_context(struct bt_ctf_stream *stream, - struct bt_ctf_field *field) -{ - int ret = 0; - struct bt_ctf_field_type *field_type = NULL; - - if (!stream || !field) { - ret = -1; - goto end; - } - - field_type = bt_ctf_field_get_type(field); - if (bt_ctf_field_type_compare(field_type, - stream->stream_class->event_context_type)) { - ret = -1; - goto end; - } - - bt_get(field); - bt_put(stream->event_context); - stream->event_context = field; -end: - bt_put(field_type); - return ret; -} - struct bt_ctf_field *bt_ctf_stream_get_packet_header( struct bt_ctf_stream *stream) { struct bt_ctf_field *packet_header = NULL; - if (!stream) { + if (!stream || stream->pos.fd < 0) { goto end; } @@ -665,7 +585,7 @@ int bt_ctf_stream_set_packet_header(struct bt_ctf_stream *stream, struct bt_ctf_trace *trace = NULL; struct bt_ctf_field_type *field_type = NULL; - if (!stream || !field) { + if (!stream || !field || stream->pos.fd < 0) { ret = -1; goto end; } @@ -703,7 +623,7 @@ int get_event_header_timestamp(struct bt_ctf_field *event_header, uint64_t *time timestamp_field_type = bt_ctf_field_get_type(timestamp_field); assert(timestamp_field_type); if (bt_ctf_field_type_get_type_id(timestamp_field_type) != - CTF_TYPE_INTEGER) { + BT_CTF_TYPE_ID_INTEGER) { ret = -1; goto end; } @@ -843,10 +763,9 @@ int bt_ctf_stream_flush(struct bt_ctf_stream *stream) } /* Write stream event context */ - if (stream->event_contexts) { + if (event->stream_event_context) { ret = bt_ctf_field_serialize( - g_ptr_array_index(stream->event_contexts, i), - &stream->pos); + event->stream_event_context, &stream->pos); if (ret) { goto end; } @@ -885,9 +804,6 @@ int bt_ctf_stream_flush(struct bt_ctf_stream *stream) } g_ptr_array_set_size(stream->events, 0); - if (stream->event_contexts) { - g_ptr_array_set_size(stream->event_contexts, 0); - } stream->flushed_packet_count++; end: bt_put(integer); @@ -918,9 +834,6 @@ void bt_ctf_stream_destroy(struct bt_object *obj) if (stream->events) { g_ptr_array_free(stream->events, TRUE); } - if (stream->event_contexts) { - g_ptr_array_free(stream->event_contexts, TRUE); - } bt_put(stream->packet_header); bt_put(stream->packet_context); bt_put(stream->event_context); @@ -955,7 +868,7 @@ int set_structure_field_integer(struct bt_ctf_field *structure, char *name, field_type = bt_ctf_field_get_type(integer); /* Something is serioulsly wrong */ assert(field_type); - if (bt_ctf_field_type_get_type_id(field_type) != CTF_TYPE_INTEGER) { + if (bt_ctf_field_type_get_type_id(field_type) != BT_CTF_TYPE_ID_INTEGER) { /* * The user most likely meant for us to populate this field * automatically. However, we can only do this if the field