#include <babeltrace/ctf-ir/clock-internal.h>
#include <babeltrace/ctf-writer/event.h>
#include <babeltrace/ctf-ir/event-internal.h>
-#include <babeltrace/ctf-ir/event-types-internal.h>
-#include <babeltrace/ctf-ir/event-fields-internal.h>
+#include <babeltrace/ctf-ir/field-types-internal.h>
+#include <babeltrace/ctf-ir/fields-internal.h>
#include <babeltrace/ctf-ir/stream.h>
#include <babeltrace/ctf-ir/stream-internal.h>
#include <babeltrace/ctf-ir/stream-class-internal.h>
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;
}
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;
}
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;
}
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;
}
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);
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);
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;
}
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;
}
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;
}
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
{
struct bt_ctf_field *packet_context = NULL;
- if (!stream) {
+ if (!stream || stream->pos.fd < 0) {
goto end;
}
int ret = 0;
struct bt_ctf_field_type *field_type;
- if (!stream || !field) {
+ if (!stream || !field || stream->pos.fd < 0) {
ret = -1;
goto 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;
}
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;
}
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;
}
}
/* 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;
}
}
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);
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);
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