X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=lib%2Fctf-ir%2Fevent.c;h=d1a7f777658b0cc2b010d89842d7942fc453d067;hb=89b08333996aedb3378fc37939d489a0768bd955;hp=6d878fd757c93c3fc8d170d21f6e3bdc118c6d63;hpb=1487a16a42ca7be6b85ef210644d9ac398d7c0dd;p=babeltrace.git diff --git a/lib/ctf-ir/event.c b/lib/ctf-ir/event.c index 6d878fd7..d1a7f777 100644 --- a/lib/ctf-ir/event.c +++ b/lib/ctf-ir/event.c @@ -26,9 +26,13 @@ * SOFTWARE. */ +#define BT_LOG_TAG "EVENT" +#include + #include #include #include +#include #include #include #include @@ -44,7 +48,8 @@ #include #include #include -#include +#include +#include static void bt_ctf_event_destroy(struct bt_object *obj); @@ -72,7 +77,13 @@ struct bt_ctf_event *bt_ctf_event_create(struct bt_ctf_event_class *event_class) struct bt_ctf_validation_output validation_output = { 0 }; int trace_valid = 0; + BT_LOGD("Creating event object: event-class-addr=%p, " + "event-class-name=\"%s\", event-class-id=%" PRId64, + event_class, bt_ctf_event_class_get_name(event_class), + bt_ctf_event_class_get_id(event_class)); + if (!event_class) { + BT_LOGW_STR("Invalid parameter: event class is NULL."); goto error; } @@ -83,18 +94,17 @@ struct bt_ctf_event *bt_ctf_event_create(struct bt_ctf_event_class *event_class) * associated to a stream class. */ if (!stream_class) { + BT_LOGW_STR("Event class is not part of a stream class."); goto error; } - /* A stream class should always have an existing event header type */ - assert(stream_class->event_header_type); - /* The event class was frozen when added to its stream class */ assert(event_class->frozen); /* Validate the trace (if any), the stream class, and the event class */ trace = bt_ctf_stream_class_get_trace(stream_class); if (trace) { + BT_LOGD_STR("Event's class is part of a trace."); packet_header_type = bt_ctf_trace_get_packet_header_type(trace); trace_valid = trace->valid; assert(trace_valid); @@ -125,12 +135,15 @@ struct bt_ctf_event *bt_ctf_event_create(struct bt_ctf_event_class *event_class) * This means something went wrong during the validation * process, not that the objects are invalid. */ + BT_LOGE("Failed to validate event and parents: ret=%d", ret); goto error; } if ((validation_output.valid_flags & validation_flags) != validation_flags) { /* Invalid trace/stream class/event class */ + BT_LOGW("Invalid trace, stream class, or event class: " + "valid-flags=0x%x", validation_output.valid_flags); goto error; } @@ -142,6 +155,7 @@ struct bt_ctf_event *bt_ctf_event_create(struct bt_ctf_event_class *event_class) */ event = g_new0(struct bt_ctf_event, 1); if (!event) { + BT_LOGE_STR("Failed to allocate one event."); goto error; } @@ -157,32 +171,47 @@ struct bt_ctf_event *bt_ctf_event_create(struct bt_ctf_event_class *event_class) event->event_class = bt_get(event_class); event->clock_values = g_hash_table_new_full(g_direct_hash, g_direct_equal, bt_put, bt_put); - event_header = - bt_ctf_field_create(validation_output.event_header_type); - if (!event_header) { - goto error; + + if (validation_output.event_header_type) { + BT_LOGD("Creating initial event header field: ft-addr=%p", + validation_output.event_header_type); + event_header = + bt_ctf_field_create(validation_output.event_header_type); + if (!event_header) { + BT_LOGE_STR("Cannot create initial event header field object."); + goto error; + } } if (validation_output.stream_event_ctx_type) { + BT_LOGD("Creating initial stream event context field: ft-addr=%p", + validation_output.stream_event_ctx_type); stream_event_context = bt_ctf_field_create( validation_output.stream_event_ctx_type); if (!stream_event_context) { + BT_LOGE_STR("Cannot create initial stream event context field object."); goto error; } } if (validation_output.event_context_type) { + BT_LOGD("Creating initial event context field: ft-addr=%p", + validation_output.event_context_type); event_context = bt_ctf_field_create( validation_output.event_context_type); if (!event_context) { + BT_LOGE_STR("Cannot create initial event context field object."); goto error; } } if (validation_output.event_payload_type) { + BT_LOGD("Creating initial event payload field: ft-addr=%p", + validation_output.event_payload_type); event_payload = bt_ctf_field_create( validation_output.event_payload_type); if (!event_payload) { + BT_LOGE_STR("Cannot create initial event payload field object."); goto error; } } @@ -221,7 +250,10 @@ struct bt_ctf_event *bt_ctf_event_create(struct bt_ctf_event_class *event_class) /* Put stuff we borrowed from the event class */ BT_PUT(stream_class); BT_PUT(trace); - + BT_LOGD("Created event object: addr=%p, event-class-name=\"%s\", " + "event-class-id=%" PRId64, + event, bt_ctf_event_class_get_name(event->event_class), + bt_ctf_event_class_get_id(event_class)); return event; error: @@ -248,6 +280,7 @@ struct bt_ctf_event_class *bt_ctf_event_get_class(struct bt_ctf_event *event) struct bt_ctf_event_class *event_class = NULL; if (!event) { + BT_LOGW_STR("Invalid parameter: event is NULL."); goto end; } @@ -262,6 +295,7 @@ struct bt_ctf_stream *bt_ctf_event_get_stream(struct bt_ctf_event *event) struct bt_ctf_stream *stream = NULL; if (!event) { + BT_LOGW_STR("Invalid parameter: event is NULL."); goto end; } @@ -288,7 +322,19 @@ int bt_ctf_event_set_payload(struct bt_ctf_event *event, { int ret = 0; - if (!event || !payload || event->frozen) { + if (!event || !payload) { + BT_LOGW("Invalid parameter: event or payload field is NULL: " + "event-addr=%p, payload-field-addr=%p", + event, payload); + ret = -1; + goto end; + } + + if (event->frozen) { + BT_LOGW("Invalid parameter: event is frozen: addr=%p, " + "event-class-name=\"%s\", event-class-id=%" PRId64, + event, bt_ctf_event_class_get_name(event->event_class), + bt_ctf_event_class_get_id(event->event_class)); ret = -1; goto end; } @@ -307,20 +353,52 @@ int bt_ctf_event_set_payload(struct bt_ctf_event *event, bt_get(payload); event->fields_payload = payload; } else { + BT_LOGW("Invalid parameter: payload field type is different from the expected field type: " + "event-addr=%p, event-class-name=\"%s\", " + "event-class-id=%" PRId64, + event, + bt_ctf_event_class_get_name(event->event_class), + bt_ctf_event_class_get_id(event->event_class)); ret = -1; } bt_put(payload_type); } + + if (ret) { + BT_LOGW("Failed to set event's payload field: event-addr=%p, " + "event-class-name=\"%s\", event-class-id=%" PRId64 ", " + "payload-field-name=\"%s\", payload-field-addr=%p", + event, bt_ctf_event_class_get_name(event->event_class), + bt_ctf_event_class_get_id(event->event_class), + name, payload); + } else { + BT_LOGV("Set event's payload field: event-addr=%p, " + "event-class-name=\"%s\", event-class-id=%" PRId64 ", " + "payload-field-name=\"%s\", payload-field-addr=%p", + event, bt_ctf_event_class_get_name(event->event_class), + bt_ctf_event_class_get_id(event->event_class), + name, payload); + } + end: return ret; } -struct bt_ctf_field *bt_ctf_event_get_payload_field(struct bt_ctf_event *event) +struct bt_ctf_field *bt_ctf_event_get_event_payload(struct bt_ctf_event *event) { struct bt_ctf_field *payload = NULL; - if (!event || !event->fields_payload) { + if (!event) { + BT_LOGW_STR("Invalid parameter: event is NULL."); + goto end; + } + + if (!event->fields_payload) { + BT_LOGV("Event has no current payload field: addr=%p, " + "event-class-name=\"%s\", event-class-id=%" PRId64, + event, bt_ctf_event_class_get_name(event->event_class), + bt_ctf_event_class_get_id(event->event_class)); goto end; } @@ -330,34 +408,10 @@ end: return payload; } -int bt_ctf_event_set_payload_field(struct bt_ctf_event *event, +int bt_ctf_event_set_event_payload(struct bt_ctf_event *event, struct bt_ctf_field *payload) { - int ret = 0; - struct bt_ctf_field_type *payload_type = NULL; - - if (!event || event->frozen) { - ret = -1; - goto end; - } - - payload_type = bt_ctf_field_get_type(payload); - if (!payload_type) { - ret = -1; - goto end; - } - - if (bt_ctf_field_type_get_type_id(payload_type) != - BT_CTF_FIELD_TYPE_ID_STRUCT) { - ret = -1; - goto end; - } - - bt_put(event->fields_payload); - event->fields_payload = bt_get(payload); -end: - bt_put(payload_type); - return ret; + return bt_ctf_event_set_payload(event, NULL, payload); } struct bt_ctf_field *bt_ctf_event_get_payload(struct bt_ctf_event *event, @@ -366,6 +420,7 @@ struct bt_ctf_field *bt_ctf_event_get_payload(struct bt_ctf_event *event, struct bt_ctf_field *field = NULL; if (!event) { + BT_LOGW_STR("Invalid parameter: event is NULL."); goto end; } @@ -381,11 +436,12 @@ end: } struct bt_ctf_field *bt_ctf_event_get_payload_by_index( - struct bt_ctf_event *event, int index) + struct bt_ctf_event *event, uint64_t index) { struct bt_ctf_field *field = NULL; - if (!event || index < 0) { + if (!event) { + BT_LOGW_STR("Invalid parameter: event is NULL."); goto end; } @@ -400,7 +456,16 @@ struct bt_ctf_field *bt_ctf_event_get_header( { struct bt_ctf_field *header = NULL; - if (!event || !event->event_header) { + if (!event) { + BT_LOGW_STR("Invalid parameter: event is NULL."); + goto end; + } + + if (!event->event_header) { + BT_LOGV("Event has no current header field: addr=%p, " + "event-class-name=\"%s\", event-class-id=%" PRId64, + event, bt_ctf_event_class_get_name(event->event_class), + bt_ctf_event_class_get_id(event->event_class)); goto end; } @@ -417,7 +482,17 @@ int bt_ctf_event_set_header(struct bt_ctf_event *event, struct bt_ctf_field_type *field_type = NULL; struct bt_ctf_stream_class *stream_class = NULL; - if (!event || event->frozen) { + if (!event) { + BT_LOGW_STR("Invalid parameter: event is NULL."); + ret = -1; + goto end; + } + + if (event->frozen) { + BT_LOGW("Invalid parameter: event is frozen: addr=%p, " + "event-class-name=\"%s\", event-class-id=%" PRId64, + event, bt_ctf_event_class_get_name(event->event_class), + bt_ctf_event_class_get_id(event->event_class)); ret = -1; goto end; } @@ -428,15 +503,41 @@ int bt_ctf_event_set_header(struct bt_ctf_event *event, * Ensure the provided header's type matches the one registered to the * stream class. */ - field_type = bt_ctf_field_get_type(header); - if (bt_ctf_field_type_compare(field_type, - stream_class->event_header_type)) { - ret = -1; - goto end; + if (header) { + field_type = bt_ctf_field_get_type(header); + if (bt_ctf_field_type_compare(field_type, + stream_class->event_header_type)) { + BT_LOGW("Invalid parameter: header field type is different from the expected field type: " + "event-addr=%p, event-class-name=\"%s\", " + "event-class-id=%" PRId64, + event, + bt_ctf_event_class_get_name(event->event_class), + bt_ctf_event_class_get_id(event->event_class)); + ret = -1; + goto end; + } + } else { + if (stream_class->event_header_type) { + BT_LOGW("Invalid parameter: setting no event header but event header field type is not NULL: " + "event-addr=%p, event-class-name=\"%s\", " + "event-class-id=%" PRId64 ", " + "event-header-ft-addr=%p", + event, + bt_ctf_event_class_get_name(event->event_class), + bt_ctf_event_class_get_id(event->event_class), + stream_class->event_header_type); + ret = -1; + goto end; + } } bt_put(event->event_header); event->event_header = bt_get(header); + BT_LOGV("Set event's header field: event-addr=%p, " + "event-class-name=\"%s\", event-class-id=%" PRId64 ", " + "header-field-addr=%p", + event, bt_ctf_event_class_get_name(event->event_class), + bt_ctf_event_class_get_id(event->event_class), header); end: bt_put(stream_class); bt_put(field_type); @@ -448,7 +549,16 @@ struct bt_ctf_field *bt_ctf_event_get_event_context( { struct bt_ctf_field *context = NULL; - if (!event || !event->context_payload) { + if (!event) { + BT_LOGW_STR("Invalid parameter: event is NULL."); + goto end; + } + + if (!event->context_payload) { + BT_LOGV("Event has no current context field: addr=%p, " + "event-class-name=\"%s\", event-class-id=%" PRId64, + event, bt_ctf_event_class_get_name(event->event_class), + bt_ctf_event_class_get_id(event->event_class)); goto end; } @@ -464,20 +574,57 @@ int bt_ctf_event_set_event_context(struct bt_ctf_event *event, int ret = 0; struct bt_ctf_field_type *field_type = NULL; - if (!event || event->frozen) { + if (!event) { + BT_LOGW_STR("Invalid parameter: event is NULL."); ret = -1; goto end; } - field_type = bt_ctf_field_get_type(context); - if (bt_ctf_field_type_compare(field_type, - event->event_class->context)) { + if (event->frozen) { + BT_LOGW("Invalid parameter: event is frozen: addr=%p, " + "event-class-name=\"%s\", event-class-id=%" PRId64, + event, bt_ctf_event_class_get_name(event->event_class), + bt_ctf_event_class_get_id(event->event_class)); ret = -1; goto end; } + if (context) { + field_type = bt_ctf_field_get_type(context); + + if (bt_ctf_field_type_compare(field_type, + event->event_class->context)) { + BT_LOGW("Invalid parameter: context field type is different from the expected field type: " + "event-addr=%p, event-class-name=\"%s\", " + "event-class-id=%" PRId64, + event, + bt_ctf_event_class_get_name(event->event_class), + bt_ctf_event_class_get_id(event->event_class)); + ret = -1; + goto end; + } + } else { + if (event->event_class->context) { + BT_LOGW("Invalid parameter: setting no event context but event context field type is not NULL: " + "event-addr=%p, event-class-name=\"%s\", " + "event-class-id=%" PRId64 ", " + "event-context-ft-addr=%p", + event, + bt_ctf_event_class_get_name(event->event_class), + bt_ctf_event_class_get_id(event->event_class), + event->event_class->context); + ret = -1; + goto end; + } + } + bt_put(event->context_payload); event->context_payload = bt_get(context); + BT_LOGV("Set event's context field: event-addr=%p, " + "event-class-name=\"%s\", event-class-id=%" PRId64 ", " + "context-field-addr=%p", + event, bt_ctf_event_class_get_name(event->event_class), + bt_ctf_event_class_get_id(event->event_class), context); end: bt_put(field_type); return ret; @@ -488,7 +635,16 @@ struct bt_ctf_field *bt_ctf_event_get_stream_event_context( { struct bt_ctf_field *stream_event_context = NULL; - if (!event || !event->stream_event_context) { + if (!event) { + BT_LOGW_STR("Invalid parameter: event is NULL."); + goto end; + } + + if (!event->stream_event_context) { + BT_LOGV("Event has no current stream event context field: addr=%p, " + "event-class-name=\"%s\", event-class-id=%" PRId64, + event, bt_ctf_event_class_get_name(event->event_class), + bt_ctf_event_class_get_id(event->event_class)); goto end; } @@ -504,7 +660,17 @@ int bt_ctf_event_set_stream_event_context(struct bt_ctf_event *event, struct bt_ctf_field_type *field_type = NULL; struct bt_ctf_stream_class *stream_class = NULL; - if (!event || event->frozen) { + if (!event) { + BT_LOGW_STR("Invalid parameter: event is NULL."); + ret = -1; + goto end; + } + + if (event->frozen) { + BT_LOGW("Invalid parameter: event is frozen: addr=%p, " + "event-class-name=\"%s\", event-class-id=%" PRId64, + event, bt_ctf_event_class_get_name(event->event_class), + bt_ctf_event_class_get_id(event->event_class)); ret = -1; goto end; } @@ -516,26 +682,55 @@ int bt_ctf_event_set_stream_event_context(struct bt_ctf_event *event, */ assert(stream_class); - field_type = bt_ctf_field_get_type(stream_event_context); - if (bt_ctf_field_type_compare(field_type, - stream_class->event_context_type)) { - ret = -1; - goto end; + if (stream_event_context) { + field_type = bt_ctf_field_get_type(stream_event_context); + if (bt_ctf_field_type_compare(field_type, + stream_class->event_context_type)) { + BT_LOGW("Invalid parameter: stream event context field type is different from the expected field type: " + "event-addr=%p, event-class-name=\"%s\", " + "event-class-id=%" PRId64, + event, + bt_ctf_event_class_get_name(event->event_class), + bt_ctf_event_class_get_id(event->event_class)); + ret = -1; + goto end; + } + } else { + if (stream_class->event_context_type) { + BT_LOGW("Invalid parameter: setting no stream event context but stream event context field type is not NULL: " + "event-addr=%p, event-class-name=\"%s\", " + "event-class-id=%" PRId64 ", " + "stream-event-context-ft-addr=%p", + event, + bt_ctf_event_class_get_name(event->event_class), + bt_ctf_event_class_get_id(event->event_class), + stream_class->event_context_type); + ret = -1; + goto end; + } } bt_get(stream_event_context); BT_MOVE(event->stream_event_context, stream_event_context); + BT_LOGV("Set event's stream event context field: event-addr=%p, " + "event-class-name=\"%s\", event-class-id=%" PRId64 ", " + "stream-event-context-field-addr=%p", + event, bt_ctf_event_class_get_name(event->event_class), + bt_ctf_event_class_get_id(event->event_class), + stream_event_context); end: BT_PUT(stream_class); bt_put(field_type); return ret; } +/* Pre-2.0 CTF writer backward compatibility */ void bt_ctf_event_get(struct bt_ctf_event *event) { bt_get(event); } +/* Pre-2.0 CTF writer backward compatibility */ void bt_ctf_event_put(struct bt_ctf_event *event) { bt_put(event); @@ -546,6 +741,11 @@ void bt_ctf_event_destroy(struct bt_object *obj) struct bt_ctf_event *event; event = container_of(obj, struct bt_ctf_event, base); + BT_LOGD("Destroying event: addr=%p, " + "event-class-name=\"%s\", event-class-id=%" PRId64, + event, bt_ctf_event_class_get_name(event->event_class), + bt_ctf_event_class_get_id(event->event_class)); + if (!event->base.parent) { /* * Event was keeping a reference to its class since it shared no @@ -555,10 +755,15 @@ void bt_ctf_event_destroy(struct bt_object *obj) bt_put(event->event_class); } g_hash_table_destroy(event->clock_values); + BT_LOGD_STR("Putting event's header field."); bt_put(event->event_header); + BT_LOGD_STR("Putting event's stream event context field."); bt_put(event->stream_event_context); + BT_LOGD_STR("Putting event's context field."); bt_put(event->context_payload); + BT_LOGD_STR("Putting event's payload field."); bt_put(event->fields_payload); + BT_LOGD_STR("Putting event's packet."); bt_put(event->packet); g_free(event); } @@ -569,11 +774,21 @@ struct bt_ctf_clock_value *bt_ctf_event_get_clock_value( struct bt_ctf_clock_value *clock_value = NULL; if (!event || !clock_class) { + BT_LOGW("Invalid parameter: event or clock class is NULL: " + "event-addr=%p, clock-class-addr=%p", + event, clock_class); goto end; } clock_value = g_hash_table_lookup(event->clock_values, clock_class); if (!clock_value) { + BT_LOGV("No clock value associated to the given clock class: " + "event-addr=%p, event-class-name=\"%s\", " + "event-class-id=%" PRId64 ", clock-class-addr=%p, " + "clock-class-name=\"%s\"", event, + bt_ctf_event_class_get_name(event->event_class), + bt_ctf_event_class_get_id(event->event_class), + clock_class, bt_ctf_clock_class_get_name(clock_class)); goto end; } @@ -586,15 +801,62 @@ int bt_ctf_event_set_clock_value(struct bt_ctf_event *event, struct bt_ctf_clock_value *value) { int ret = 0; + struct bt_ctf_trace *trace; + struct bt_ctf_stream_class *stream_class; + struct bt_ctf_event_class *event_class; + struct bt_ctf_clock_class *clock_class = NULL; + + if (!event || !value) { + BT_LOGW("Invalid parameter: event or clock value is NULL: " + "event-addr=%p, clock-value-addr=%p", + event, value); + ret = -1; + goto end; + } + + if (event->frozen) { + BT_LOGW("Invalid parameter: event is frozen: addr=%p, " + "event-class-name=\"%s\", event-class-id=%" PRId64, + event, bt_ctf_event_class_get_name(event->event_class), + bt_ctf_event_class_get_id(event->event_class)); + ret = -1; + goto end; + } - if (!event || !value || event->frozen) { + clock_class = bt_ctf_clock_value_get_class(value); + event_class = bt_ctf_event_borrow_event_class(event); + assert(event_class); + stream_class = bt_ctf_event_class_borrow_stream_class(event_class); + assert(stream_class); + trace = bt_ctf_stream_class_borrow_trace(stream_class); + assert(trace); + + if (!bt_ctf_trace_has_clock_class(trace, clock_class)) { + BT_LOGW("Invalid parameter: clock class is not part of event's trace: " + "event-addr=%p, event-class-name=\"%s\", " + "event-class-id=%" PRId64 ", clock-class-addr=%p, " + "clock-class-name=\"%s\"", + event, bt_ctf_event_class_get_name(event->event_class), + bt_ctf_event_class_get_id(event->event_class), + clock_class, bt_ctf_clock_class_get_name(clock_class)); ret = -1; goto end; } - g_hash_table_insert(event->clock_values, - bt_ctf_clock_value_get_class(value), bt_get(value)); + g_hash_table_insert(event->clock_values, clock_class, bt_get(value)); + BT_LOGV("Set event's clock value: " + "event-addr=%p, event-class-name=\"%s\", " + "event-class-id=%" PRId64 ", clock-class-addr=%p, " + "clock-class-name=\"%s\", clock-value-addr=%p, " + "clock-value-cycles=%" PRIu64, + event, bt_ctf_event_class_get_name(event->event_class), + bt_ctf_event_class_get_id(event->event_class), + clock_class, bt_ctf_clock_class_get_name(clock_class), + value, value->value); + clock_class = NULL; + end: + bt_put(clock_class); return ret; } @@ -608,6 +870,11 @@ int bt_ctf_event_validate(struct bt_ctf_event *event) assert(event); ret = bt_ctf_field_validate(event->event_header); if (ret) { + BT_LOGD("Invalid event's header field: " + "event-addr=%p, event-class-name=\"%s\", " + "event-class-id=%" PRId64, + event, bt_ctf_event_class_get_name(event->event_class), + bt_ctf_event_class_get_id(event->event_class)); goto end; } @@ -620,16 +887,34 @@ int bt_ctf_event_validate(struct bt_ctf_event *event) if (stream_class->event_context_type) { ret = bt_ctf_field_validate(event->stream_event_context); if (ret) { + BT_LOGD("Invalid event's stream event context field: " + "event-addr=%p, event-class-name=\"%s\", " + "event-class-id=%" PRId64, + event, + bt_ctf_event_class_get_name(event->event_class), + bt_ctf_event_class_get_id(event->event_class)); goto end; } } ret = bt_ctf_field_validate(event->fields_payload); if (ret) { + BT_LOGD("Invalid event's payload field: " + "event-addr=%p, event-class-name=\"%s\", " + "event-class-id=%" PRId64, + event, + bt_ctf_event_class_get_name(event->event_class), + bt_ctf_event_class_get_id(event->event_class)); goto end; } if (event->event_class->context) { + BT_LOGD("Invalid event's context field: " + "event-addr=%p, event-class-name=\"%s\", " + "event-class-id=%" PRId64, + event, + bt_ctf_event_class_get_name(event->event_class), + bt_ctf_event_class_get_id(event->event_class)); ret = bt_ctf_field_validate(event->context_payload); } end: @@ -647,18 +932,32 @@ int bt_ctf_event_serialize(struct bt_ctf_event *event, assert(event); assert(pos); + BT_LOGV_STR("Serializing event's context field."); if (event->context_payload) { ret = bt_ctf_field_serialize(event->context_payload, pos, native_byte_order); if (ret) { + BT_LOGW("Cannot serialize event's context field: " + "event-addr=%p, event-class-name=\"%s\", " + "event-class-id=%" PRId64, + event, + bt_ctf_event_class_get_name(event->event_class), + bt_ctf_event_class_get_id(event->event_class)); goto end; } } + BT_LOGV_STR("Serializing event's payload field."); if (event->fields_payload) { ret = bt_ctf_field_serialize(event->fields_payload, pos, native_byte_order); if (ret) { + BT_LOGW("Cannot serialize event's payload field: " + "event-addr=%p, event-class-name=\"%s\", " + "event-class-id=%" PRId64, + event, + bt_ctf_event_class_get_name(event->event_class), + bt_ctf_event_class_get_id(event->event_class)); goto end; } } @@ -670,7 +969,16 @@ struct bt_ctf_packet *bt_ctf_event_get_packet(struct bt_ctf_event *event) { struct bt_ctf_packet *packet = NULL; - if (!event || !event->packet) { + if (!event) { + BT_LOGW_STR("Invalid parameter: event is NULL."); + goto end; + } + + if (!event->packet) { + BT_LOGV("Event has no current packet: addr=%p, " + "event-class-name=\"%s\", event-class-id=%" PRId64, + event, bt_ctf_event_class_get_name(event->event_class), + bt_ctf_event_class_get_id(event->event_class)); goto end; } @@ -687,7 +995,19 @@ int bt_ctf_event_set_packet(struct bt_ctf_event *event, struct bt_ctf_stream *stream = NULL; int ret = 0; - if (!event || !packet || event->frozen) { + if (!event || !packet) { + BT_LOGW("Invalid parameter: event or packet is NULL: " + "event-addr=%p, packet-addr=%p", + event, packet); + ret = -1; + goto end; + } + + if (event->frozen) { + BT_LOGW("Invalid parameter: event is frozen: addr=%p, " + "event-class-name=\"%s\", event-class-id=%" PRId64, + event, bt_ctf_event_class_get_name(event->event_class), + bt_ctf_event_class_get_id(event->event_class)); ret = -1; goto end; } @@ -699,6 +1019,13 @@ int bt_ctf_event_set_packet(struct bt_ctf_event *event, stream = bt_ctf_event_get_stream(event); if (stream) { if (packet->stream != stream) { + BT_LOGW("Invalid parameter: packet's stream and event's stream differ: " + "event-addr=%p, event-class-name=\"%s\", " + "event-class-id=%" PRId64 ", packet-stream-addr=%p, " + "event-stream-addr=%p", + event, bt_ctf_event_class_get_name(event->event_class), + bt_ctf_event_class_get_id(event->event_class), + packet->stream, stream); ret = -1; goto end; } @@ -712,6 +1039,13 @@ int bt_ctf_event_set_packet(struct bt_ctf_event *event, assert(packet_stream_class); if (event_stream_class != packet_stream_class) { + BT_LOGW("Invalid parameter: packet's stream class and event's stream class differ: " + "event-addr=%p, event-class-name=\"%s\", " + "event-class-id=%" PRId64 ", packet-stream-class-addr=%p, " + "event-stream-class-addr=%p", + event, bt_ctf_event_class_get_name(event->event_class), + bt_ctf_event_class_get_id(event->event_class), + packet_stream_class, event_stream_class); ret = -1; goto end; } @@ -719,6 +1053,11 @@ int bt_ctf_event_set_packet(struct bt_ctf_event *event, bt_get(packet); BT_MOVE(event->packet, packet); + BT_LOGV("Set event's packet: event-addr=%p, " + "event-class-name=\"%s\", event-class-id=%" PRId64 ", " + "packet-addr=%p", + event, bt_ctf_event_class_get_name(event->event_class), + bt_ctf_event_class_get_id(event->event_class), packet); end: BT_PUT(stream); @@ -732,10 +1071,23 @@ BT_HIDDEN void bt_ctf_event_freeze(struct bt_ctf_event *event) { assert(event); + + if (event->frozen) { + return; + } + + BT_LOGD("Freezing event: addr=%p, " + "event-class-name=\"%s\", event-class-id=%" PRId64, + event, bt_ctf_event_class_get_name(event->event_class), + bt_ctf_event_class_get_id(event->event_class)); bt_ctf_packet_freeze(event->packet); + BT_LOGD_STR("Freezing event's header field."); bt_ctf_field_freeze(event->event_header); + BT_LOGD_STR("Freezing event's stream event context field."); bt_ctf_field_freeze(event->stream_event_context); + BT_LOGD_STR("Freezing event's context field."); bt_ctf_field_freeze(event->context_payload); + BT_LOGD_STR("Freezing event's payload field."); bt_ctf_field_freeze(event->fields_payload); event->frozen = 1; }