From d2f71f12cc85b3429ff731e6fdec19fe63cd3f7e Mon Sep 17 00:00:00 2001 From: Philippe Proulx Date: Sun, 14 May 2017 02:05:28 -0400 Subject: [PATCH] lib/ctf-ir/stream-class.c: add logging MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Philippe Proulx Signed-off-by: Jérémie Galarneau --- .../babeltrace/ctf-ir/stream-class-internal.h | 2 +- lib/ctf-ir/stream-class.c | 350 ++++++++++++++++-- 2 files changed, 329 insertions(+), 23 deletions(-) diff --git a/include/babeltrace/ctf-ir/stream-class-internal.h b/include/babeltrace/ctf-ir/stream-class-internal.h index 0dc33b13..7e5dcb9b 100644 --- a/include/babeltrace/ctf-ir/stream-class-internal.h +++ b/include/babeltrace/ctf-ir/stream-class-internal.h @@ -74,7 +74,7 @@ void bt_ctf_stream_class_set_byte_order( /* Set stream_class id without checking if the stream class is frozen */ BT_HIDDEN -int _bt_ctf_stream_class_set_id(struct bt_ctf_stream_class *stream_class, +void _bt_ctf_stream_class_set_id(struct bt_ctf_stream_class *stream_class, int64_t id); BT_HIDDEN diff --git a/lib/ctf-ir/stream-class.c b/lib/ctf-ir/stream-class.c index 4da65f32..0e3a33bc 100644 --- a/lib/ctf-ir/stream-class.c +++ b/lib/ctf-ir/stream-class.c @@ -26,6 +26,9 @@ * SOFTWARE. */ +#define BT_LOG_TAG "STREAM-CLASS" +#include + #include #include #include @@ -56,24 +59,30 @@ int init_packet_context(struct bt_ctf_stream_class *stream_class); struct bt_ctf_stream_class *bt_ctf_stream_class_create(const char *name) { - struct bt_ctf_stream_class *stream_class = - bt_ctf_stream_class_create_empty(name); + struct bt_ctf_stream_class *stream_class; int ret; + BT_LOGD("Creating default stream class object: name=\"%s\"", name); + stream_class = bt_ctf_stream_class_create_empty(name); if (!stream_class) { + BT_LOGD_STR("Cannot create empty stream class."); goto error; } ret = init_event_header(stream_class); if (ret) { + BT_LOGE_STR("Cannot initialize stream class's event header field type."); goto error; } ret = init_packet_context(stream_class); if (ret) { + BT_LOGE_STR("Cannot initialize stream class's packet context field type."); goto error; } + BT_LOGD("Created default stream class object: addr=%p, name=\"%s\"", + stream_class, name); return stream_class; error: @@ -85,12 +94,17 @@ struct bt_ctf_stream_class *bt_ctf_stream_class_create_empty(const char *name) { struct bt_ctf_stream_class *stream_class = NULL; + BT_LOGD("Creating empty stream class object: name=\"%s\"", name); + if (name && bt_ctf_validate_identifier(name)) { + BT_LOGW("Invalid parameter: stream class's name is not a valid CTF identifier: " + "name=\"%s\"", name); goto error; } stream_class = g_new0(struct bt_ctf_stream_class, 1); if (!stream_class) { + BT_LOGE_STR("Failed to allocate one stream class."); goto error; } @@ -98,28 +112,38 @@ struct bt_ctf_stream_class *bt_ctf_stream_class_create_empty(const char *name) stream_class->event_classes = g_ptr_array_new_with_free_func( (GDestroyNotify) bt_object_release); if (!stream_class->event_classes) { + BT_LOGE_STR("Failed to allocate a GPtrArray."); goto error; } stream_class->event_classes_ht = g_hash_table_new_full(g_int64_hash, g_int64_equal, g_free, NULL); + if (!stream_class->event_classes_ht) { + BT_LOGE_STR("Failed to allocate a GHashTable."); + goto error; + } stream_class->packet_context_type = bt_ctf_field_type_structure_create(); if (!stream_class->packet_context_type) { + BT_LOGE_STR("Cannot stream class's initial packet context field type."); goto error; } stream_class->event_header_type = bt_ctf_field_type_structure_create(); if (!stream_class->event_header_type) { + BT_LOGE_STR("Cannot stream class's initial event header field type."); goto error; } stream_class->event_context_type = bt_ctf_field_type_structure_create(); if (!stream_class->event_context_type) { + BT_LOGE_STR("Cannot stream class's initial event context field type."); goto error; } bt_object_init(stream_class, bt_ctf_stream_class_destroy); + BT_LOGD("Created empty stream class object: addr=%p, name=\"%s\"", + stream_class, name); return stream_class; error: @@ -141,6 +165,7 @@ const char *bt_ctf_stream_class_get_name( const char *name = NULL; if (!stream_class) { + BT_LOGW_STR("Invalid parameter: stream class is NULL."); goto end; } @@ -154,12 +179,26 @@ int bt_ctf_stream_class_set_name(struct bt_ctf_stream_class *stream_class, { int ret = 0; - if (!stream_class || stream_class->frozen) { + if (!stream_class) { + BT_LOGW_STR("Invalid parameter: stream class is NULL."); + ret = -1; + goto end; + } + + if (stream_class->frozen) { + BT_LOGW("Invalid parameter: stream class is frozen: " + "addr=%p, name=\"%s\", id=%" PRId64, + stream_class, bt_ctf_stream_class_get_name(stream_class), + bt_ctf_stream_class_get_id(stream_class)); ret = -1; goto end; } g_string_assign(stream_class->name, name); + BT_LOGV("Set stream class's name: " + "addr=%p, name=\"%s\", id=%" PRId64, + stream_class, bt_ctf_stream_class_get_name(stream_class), + bt_ctf_stream_class_get_id(stream_class)); end: return ret; } @@ -169,7 +208,16 @@ struct bt_ctf_clock *bt_ctf_stream_class_get_clock( { struct bt_ctf_clock *clock = NULL; - if (!stream_class || !stream_class->clock) { + if (!stream_class) { + BT_LOGW_STR("Invalid parameter: stream class is NULL."); + goto end; + } + + if (!stream_class->clock) { + BT_LOGV("Stream class has no clock: " + "addr=%p, name=\"%s\", id=%" PRId64, + stream_class, bt_ctf_stream_class_get_name(stream_class), + bt_ctf_stream_class_get_id(stream_class)); goto end; } @@ -184,7 +232,19 @@ int bt_ctf_stream_class_set_clock(struct bt_ctf_stream_class *stream_class, int ret = 0; struct bt_ctf_field_type *timestamp_field = NULL; - if (!stream_class || !clock || stream_class->frozen) { + if (!stream_class || !clock) { + BT_LOGW("Invalid parameter: stream class or clock is NULL: " + "stream-class-addr=%p, clock-addr=%p", + stream_class, clock); + ret = -1; + goto end; + } + + if (stream_class->frozen) { + BT_LOGW("Invalid parameter: stream class is frozen: " + "addr=%p, name=\"%s\", id=%" PRId64, + stream_class, bt_ctf_stream_class_get_name(stream_class), + bt_ctf_stream_class_get_id(stream_class)); ret = -1; goto end; } @@ -216,6 +276,13 @@ int bt_ctf_stream_class_set_clock(struct bt_ctf_stream_class *stream_class, /* Replace the current clock of this stream class. */ bt_put(stream_class->clock); stream_class->clock = bt_get(clock); + BT_LOGV("Set stream class's clock: " + "addr=%p, name=\"%s\", id=%" PRId64 ", " + "clock-addr=%p, clock-name=\"%s\"", + stream_class, bt_ctf_stream_class_get_name(stream_class), + bt_ctf_stream_class_get_id(stream_class), + stream_class->clock, + bt_ctf_clock_get_name(stream_class->clock)); end: bt_put(timestamp_field); @@ -226,7 +293,16 @@ int64_t bt_ctf_stream_class_get_id(struct bt_ctf_stream_class *stream_class) { int64_t ret; - if (!stream_class || !stream_class->id_set) { + if (!stream_class) { + BT_LOGW_STR("Invalid parameter: stream class is NULL."); + ret = (int64_t) -1; + goto end; + } + + if (!stream_class->id_set) { + BT_LOGV("Stream class's ID is not set: addr=%p, name=\"%s\"", + stream_class, + bt_ctf_stream_class_get_name(stream_class)); ret = (int64_t) -1; goto end; } @@ -237,12 +313,16 @@ end: } BT_HIDDEN -int _bt_ctf_stream_class_set_id( +void _bt_ctf_stream_class_set_id( struct bt_ctf_stream_class *stream_class, int64_t id) { + assert(stream_class); stream_class->id = id; stream_class->id_set = 1; - return 0; + BT_LOGV("Set stream class's ID (internal): " + "addr=%p, name=\"%s\", id=%" PRId64, + stream_class, bt_ctf_stream_class_get_name(stream_class), + bt_ctf_stream_class_get_id(stream_class)); } struct event_class_set_stream_class_id_data { @@ -275,13 +355,14 @@ int bt_ctf_stream_class_set_id_no_check( event_class_set_stream_id, &data); ret = data.ret; if (ret) { + BT_LOGE("Cannot set the IDs of all stream class's event classes: " + "addr=%p, name=\"%s\", id=%" PRId64, + stream_class, bt_ctf_stream_class_get_name(stream_class), + bt_ctf_stream_class_get_id(stream_class)); goto end; } - ret = _bt_ctf_stream_class_set_id(stream_class, id); - if (ret) { - goto end; - } + _bt_ctf_stream_class_set_id(stream_class, id); end: return ret; } @@ -292,12 +373,39 @@ int bt_ctf_stream_class_set_id(struct bt_ctf_stream_class *stream_class, int ret = 0; int64_t id = (int64_t) id_param; - if (!stream_class || stream_class->frozen || id < 0) { + if (!stream_class) { + BT_LOGW_STR("Invalid parameter: stream class is NULL."); + ret = -1; + goto end; + } + + if (stream_class->frozen) { + BT_LOGW("Invalid parameter: stream class is frozen: " + "addr=%p, name=\"%s\", id=%" PRId64, + stream_class, bt_ctf_stream_class_get_name(stream_class), + bt_ctf_stream_class_get_id(stream_class)); + ret = -1; + goto end; + } + + if (id < 0) { + BT_LOGW("Invalid parameter: invalid stream class's ID: " + "stream-class-addr=%p, stream-class-name=\"%s\", " + "stream-class-id=%" PRId64 ", id=%" PRIu64, + stream_class, bt_ctf_stream_class_get_name(stream_class), + bt_ctf_stream_class_get_id(stream_class), + id_param); ret = -1; goto end; } ret = bt_ctf_stream_class_set_id_no_check(stream_class, id); + if (ret == 0) { + BT_LOGV("Set stream class's ID: " + "addr=%p, name=\"%s\", id=%" PRId64, + stream_class, bt_ctf_stream_class_get_name(stream_class), + bt_ctf_stream_class_get_id(stream_class)); + } end: return ret; } @@ -328,6 +436,9 @@ void event_class_exists(gpointer element, gpointer query) } if (id_a == id_b) { + BT_LOGD("Event class with this ID already exists in the stream class: " + "id=%" PRId64 ", name=\"%s\"", + id_a, bt_ctf_event_class_get_name(event_class_a)); search_query->found = 1; goto end; } @@ -354,7 +465,20 @@ int bt_ctf_stream_class_add_event_class( const enum bt_ctf_validation_flag validation_flags = BT_CTF_VALIDATION_FLAG_EVENT; + BT_LOGD("Adding event class to stream class: " + "stream-class-addr=%p, stream-class-name=\"%s\", " + "stream-class-id=%" PRId64 ", event-class-addr=%p, " + "event-class-name=\"%s\", event-class-id=%" PRId64, + stream_class, bt_ctf_stream_class_get_name(stream_class), + bt_ctf_stream_class_get_id(stream_class), + event_class, + bt_ctf_event_class_get_name(event_class), + bt_ctf_event_class_get_id(event_class)); + if (!stream_class || !event_class) { + BT_LOGW("Invalid parameter: stream class or event class is NULL: " + "stream-class-addr=%p, event-class-addr=%p", + stream_class, event_class); ret = -1; goto end; } @@ -367,6 +491,7 @@ int bt_ctf_stream_class_add_event_class( event_id = g_new(int64_t, 1); if (!event_id) { + BT_LOGE_STR("Failed to allocate one int64_t."); ret = -1; goto end; } @@ -376,6 +501,7 @@ int bt_ctf_stream_class_add_event_class( g_ptr_array_foreach(stream_class->event_classes, event_class_exists, &query); if (query.found) { + BT_LOGW_STR("Another event class part of this stream class has the same ID."); ret = -1; goto end; } @@ -383,6 +509,13 @@ int bt_ctf_stream_class_add_event_class( old_stream_class = bt_ctf_event_class_get_stream_class(event_class); if (old_stream_class) { /* Event class is already associated to a stream class. */ + BT_LOGW("Event class is already part of another stream class: " + "event-class-stream-class-addr=%p, " + "event-class-stream-class-name=\"%s\", " + "event-class-stream-class-id=%" PRId64, + old_stream_class, + bt_ctf_stream_class_get_name(old_stream_class), + bt_ctf_stream_class_get_id(old_stream_class)); ret = -1; goto end; } @@ -433,12 +566,16 @@ int bt_ctf_stream_class_add_event_class( * validation process, not that the objects are * invalid. */ + BT_LOGE("Failed to validate event class: ret=%d", ret); goto end; } if ((validation_output.valid_flags & validation_flags) != validation_flags) { /* Invalid event class */ + BT_LOGE("Invalid trace, stream class, or event class: " + "valid-flags=0x%x", + validation_output.valid_flags); ret = -1; goto end; } @@ -447,16 +584,24 @@ int bt_ctf_stream_class_add_event_class( /* Only set an event ID if none was explicitly set before */ *event_id = bt_ctf_event_class_get_id(event_class); if (*event_id < 0) { + BT_LOGV("Event class has no ID: automatically setting it: " + "id=%" PRId64, stream_class->next_event_id); + if (bt_ctf_event_class_set_id(event_class, - stream_class->next_event_id++)) { + stream_class->next_event_id)) { + BT_LOGE("Cannot set event class's ID: id=%" PRId64, + stream_class->next_event_id); ret = -1; goto end; } + stream_class->next_event_id++; *event_id = stream_class->next_event_id; } ret = bt_ctf_event_class_set_stream_id(event_class, stream_class->id); if (ret) { + BT_LOGE("Cannot set event class's stream class ID attribute: ret=%d", + ret); goto end; } @@ -496,6 +641,17 @@ int bt_ctf_stream_class_add_event_class( (void) bt_ctf_trace_object_modification(&obj, trace); } + + BT_LOGD("Added event class to stream class: " + "stream-class-addr=%p, stream-class-name=\"%s\", " + "stream-class-id=%" PRId64 ", event-class-addr=%p, " + "event-class-name=\"%s\", event-class-id=%" PRId64, + stream_class, bt_ctf_stream_class_get_name(stream_class), + bt_ctf_stream_class_get_id(stream_class), + event_class, + bt_ctf_event_class_get_name(event_class), + bt_ctf_event_class_get_id(event_class)); + end: BT_PUT(trace); BT_PUT(old_stream_class); @@ -517,6 +673,7 @@ int64_t bt_ctf_stream_class_get_event_class_count( int64_t ret; if (!stream_class) { + BT_LOGW_STR("Invalid parameter: stream class is NULL."); ret = (int64_t) -1; goto end; } @@ -531,7 +688,18 @@ struct bt_ctf_event_class *bt_ctf_stream_class_get_event_class_by_index( { struct bt_ctf_event_class *event_class = NULL; - if (!stream_class || index >= stream_class->event_classes->len) { + if (!stream_class) { + BT_LOGW_STR("Invalid parameter: stream class is NULL."); + goto end; + } + + if (index >= stream_class->event_classes->len) { + BT_LOGW("Invalid parameter: index is out of bounds: " + "addr=%p, name=\"%s\", id=%" PRId64 ", " + "index=%" PRIu64 ", count=%u", + stream_class, bt_ctf_stream_class_get_name(stream_class), + bt_ctf_stream_class_get_id(stream_class), + index, stream_class->event_classes->len); goto end; } @@ -547,7 +715,18 @@ struct bt_ctf_event_class *bt_ctf_stream_class_get_event_class_by_id( int64_t id_key = (int64_t) id; struct bt_ctf_event_class *event_class = NULL; - if (!stream_class || id_key < 0) { + if (!stream_class) { + BT_LOGW_STR("Invalid parameter: stream class is NULL."); + goto end; + } + + if (id_key < 0) { + BT_LOGW("Invalid parameter: invalid event class's ID: " + "stream-class-addr=%p, stream-class-name=\"%s\", " + "stream-class-id=%" PRId64 ", event-class-id=%" PRIu64, + stream_class, + bt_ctf_stream_class_get_name(stream_class), + bt_ctf_stream_class_get_id(stream_class), id); goto end; } @@ -564,6 +743,7 @@ struct bt_ctf_field_type *bt_ctf_stream_class_get_packet_context_type( struct bt_ctf_field_type *ret = NULL; if (!stream_class) { + BT_LOGW_STR("Invalid parameter: stream class is NULL."); goto end; } @@ -579,7 +759,17 @@ int bt_ctf_stream_class_set_packet_context_type( { int ret = 0; - if (!stream_class || stream_class->frozen) { + if (!stream_class) { + BT_LOGW_STR("Invalid parameter: stream class is NULL."); + ret = -1; + goto end; + } + + if (stream_class->frozen) { + BT_LOGW("Invalid parameter: stream class is frozen: " + "addr=%p, name=\"%s\", id=%" PRId64, + stream_class, bt_ctf_stream_class_get_name(stream_class), + bt_ctf_stream_class_get_id(stream_class)); ret = -1; goto end; } @@ -588,6 +778,14 @@ int bt_ctf_stream_class_set_packet_context_type( bt_ctf_field_type_get_type_id(packet_context_type) != BT_CTF_FIELD_TYPE_ID_STRUCT) { /* A packet context must be a structure. */ + BT_LOGW("Invalid parameter: stream class's packet context field type must be a structure: " + "addr=%p, name=\"%s\", id=%" PRId64 ", " + "packet-context-ft-addr=%p, packet-context-ft-id=%s", + stream_class, bt_ctf_stream_class_get_name(stream_class), + bt_ctf_stream_class_get_id(stream_class), + packet_context_type, + bt_ctf_field_type_id_string( + bt_ctf_field_type_get_type_id(packet_context_type))); ret = -1; goto end; } @@ -595,6 +793,13 @@ int bt_ctf_stream_class_set_packet_context_type( bt_put(stream_class->packet_context_type); bt_get(packet_context_type); stream_class->packet_context_type = packet_context_type; + BT_LOGV("Set stream class's packet context field type: " + "addr=%p, name=\"%s\", id=%" PRId64 ", " + "packet-context-ft-addr=%p", + stream_class, bt_ctf_stream_class_get_name(stream_class), + bt_ctf_stream_class_get_id(stream_class), + packet_context_type); + end: return ret; } @@ -604,7 +809,16 @@ struct bt_ctf_field_type *bt_ctf_stream_class_get_event_header_type( { struct bt_ctf_field_type *ret = NULL; - if (!stream_class || !stream_class->event_header_type) { + if (!stream_class) { + BT_LOGW_STR("Invalid parameter: stream class is NULL."); + goto end; + } + + if (!stream_class->event_header_type) { + BT_LOGV("Stream class has no event header field type: " + "addr=%p, name=\"%s\", id=%" PRId64, + stream_class, bt_ctf_stream_class_get_name(stream_class), + bt_ctf_stream_class_get_id(stream_class)); goto end; } @@ -620,7 +834,17 @@ int bt_ctf_stream_class_set_event_header_type( { int ret = 0; - if (!stream_class || stream_class->frozen) { + if (!stream_class) { + BT_LOGW_STR("Invalid parameter: stream class is NULL."); + ret = -1; + goto end; + } + + if (stream_class->frozen) { + BT_LOGW("Invalid parameter: stream class is frozen: " + "addr=%p, name=\"%s\", id=%" PRId64, + stream_class, bt_ctf_stream_class_get_name(stream_class), + bt_ctf_stream_class_get_id(stream_class)); ret = -1; goto end; } @@ -629,12 +853,26 @@ int bt_ctf_stream_class_set_event_header_type( bt_ctf_field_type_get_type_id(event_header_type) != BT_CTF_FIELD_TYPE_ID_STRUCT) { /* An event header must be a structure. */ + BT_LOGW("Invalid parameter: stream class's event header field type must be a structure: " + "addr=%p, name=\"%s\", id=%" PRId64 ", " + "event-header-ft-addr=%p, event-header-ft-id=%s", + stream_class, bt_ctf_stream_class_get_name(stream_class), + bt_ctf_stream_class_get_id(stream_class), + event_header_type, + bt_ctf_field_type_id_string( + bt_ctf_field_type_get_type_id(event_header_type))); ret = -1; goto end; } bt_put(stream_class->event_header_type); stream_class->event_header_type = bt_get(event_header_type); + BT_LOGV("Set stream class's event header field type: " + "addr=%p, name=\"%s\", id=%" PRId64 ", " + "event-header-ft-addr=%p", + stream_class, bt_ctf_stream_class_get_name(stream_class), + bt_ctf_stream_class_get_id(stream_class), + event_header_type); end: return ret; } @@ -644,7 +882,12 @@ struct bt_ctf_field_type *bt_ctf_stream_class_get_event_context_type( { struct bt_ctf_field_type *ret = NULL; - if (!stream_class || !stream_class->event_context_type) { + if (!stream_class) { + BT_LOGW_STR("Invalid parameter: stream class is NULL."); + goto end; + } + + if (!stream_class->event_context_type) { goto end; } @@ -660,7 +903,17 @@ int bt_ctf_stream_class_set_event_context_type( { int ret = 0; - if (!stream_class || stream_class->frozen) { + if (!stream_class) { + BT_LOGW_STR("Invalid parameter: stream class is NULL."); + ret = -1; + goto end; + } + + if (stream_class->frozen) { + BT_LOGW("Invalid parameter: stream class is frozen: " + "addr=%p, name=\"%s\", id=%" PRId64, + stream_class, bt_ctf_stream_class_get_name(stream_class), + bt_ctf_stream_class_get_id(stream_class)); ret = -1; goto end; } @@ -669,21 +922,37 @@ int bt_ctf_stream_class_set_event_context_type( bt_ctf_field_type_get_type_id(event_context_type) != BT_CTF_FIELD_TYPE_ID_STRUCT) { /* A packet context must be a structure. */ + BT_LOGW("Invalid parameter: stream class's event context field type must be a structure: " + "addr=%p, name=\"%s\", id=%" PRId64 ", " + "event-context-ft-addr=%p, event-context-ft-id=%s", + stream_class, bt_ctf_stream_class_get_name(stream_class), + bt_ctf_stream_class_get_id(stream_class), + event_context_type, + bt_ctf_field_type_id_string( + bt_ctf_field_type_get_type_id(event_context_type))); ret = -1; goto end; } bt_put(stream_class->event_context_type); stream_class->event_context_type = bt_get(event_context_type); + BT_LOGV("Set stream class's event context field type: " + "addr=%p, name=\"%s\", id=%" PRId64 ", " + "event-context-ft-addr=%p", + stream_class, bt_ctf_stream_class_get_name(stream_class), + bt_ctf_stream_class_get_id(stream_class), + event_context_type); end: return ret; } +/* Pre-2.0 CTF writer backward compatibility */ void bt_ctf_stream_class_get(struct bt_ctf_stream_class *stream_class) { bt_get(stream_class); } +/* Pre-2.0 CTF writer backward compatibility */ void bt_ctf_stream_class_put(struct bt_ctf_stream_class *stream_class) { bt_put(stream_class); @@ -722,6 +991,9 @@ int bt_ctf_stream_class_visit(struct bt_ctf_stream_class *stream_class, .type = BT_CTF_OBJECT_TYPE_STREAM_CLASS }; if (!stream_class || !visitor) { + BT_LOGW("Invalid parameter: stream class or visitor is NULL: " + "stream-class-addr=%p, visitor=%p", + stream_class, visitor); ret = -1; goto end; } @@ -729,6 +1001,7 @@ int bt_ctf_stream_class_visit(struct bt_ctf_stream_class *stream_class, ret = visitor_helper(&obj, get_event_class_count, get_event_class, visit_event_class, visitor, data); + BT_LOGV("visitor_helper() returned: ret=%d", ret); end: return ret; } @@ -736,10 +1009,13 @@ end: BT_HIDDEN void bt_ctf_stream_class_freeze(struct bt_ctf_stream_class *stream_class) { - if (!stream_class) { + if (!stream_class || stream_class->frozen) { return; } + BT_LOGD("Freezing stream class: addr=%p, name=\"%s\", id=%" PRId64, + stream_class, bt_ctf_stream_class_get_name(stream_class), + bt_ctf_stream_class_get_id(stream_class)); stream_class->frozen = 1; bt_ctf_field_type_freeze(stream_class->event_header_type); bt_ctf_field_type_freeze(stream_class->packet_context_type); @@ -757,9 +1033,15 @@ int bt_ctf_stream_class_serialize(struct bt_ctf_stream_class *stream_class, int ret = 0; size_t i; + BT_LOGD("Serializing stream class's metadata: " + "stream-class-addr=%p, stream-class-name=\"%s\", " + "stream-class-id=%" PRId64 ", metadata-context-addr=%p", + stream_class, bt_ctf_stream_class_get_name(stream_class), + bt_ctf_stream_class_get_id(stream_class), context); g_string_assign(context->field_name, ""); context->current_indentation_level = 1; if (!stream_class->id_set) { + BT_LOGW_STR("Stream class's ID is not set."); ret = -1; goto end; } @@ -770,6 +1052,8 @@ int bt_ctf_stream_class_serialize(struct bt_ctf_stream_class *stream_class, ret = bt_ctf_field_type_serialize(stream_class->event_header_type, context); if (ret) { + BT_LOGE("Cannot serialize stream class's event header field type's metadata: " + "ret=%d", ret); goto end; } @@ -778,6 +1062,8 @@ int bt_ctf_stream_class_serialize(struct bt_ctf_stream_class *stream_class, ret = bt_ctf_field_type_serialize(stream_class->packet_context_type, context); if (ret) { + BT_LOGE("Cannot serialize stream class's packet context field type's metadata: " + "ret=%d", ret); goto end; } } @@ -787,6 +1073,8 @@ int bt_ctf_stream_class_serialize(struct bt_ctf_stream_class *stream_class, ret = bt_ctf_field_type_serialize( stream_class->event_context_type, context); if (ret) { + BT_LOGE("Cannot serialize stream class's event context field type's metadata: " + "ret=%d", ret); goto end; } } @@ -798,6 +1086,12 @@ int bt_ctf_stream_class_serialize(struct bt_ctf_stream_class *stream_class, ret = bt_ctf_event_class_serialize(event_class, context); if (ret) { + BT_LOGE("Cannot serialize event class's metadata: " + "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)); goto end; } } @@ -812,6 +1106,9 @@ void bt_ctf_stream_class_destroy(struct bt_object *obj) struct bt_ctf_stream_class *stream_class; stream_class = container_of(obj, struct bt_ctf_stream_class, base); + BT_LOGD("Destroying stream class: addr=%p, name=\"%s\", id=%" PRId64, + stream_class, bt_ctf_stream_class_get_name(stream_class), + bt_ctf_stream_class_get_id(stream_class)); bt_put(stream_class->clock); if (stream_class->event_classes_ht) { @@ -843,6 +1140,7 @@ int init_event_header(struct bt_ctf_stream_class *stream_class) get_field_type(FIELD_TYPE_ALIAS_UINT64_T); if (!event_header_type) { + BT_LOGE_STR("Cannot create empty structure field type."); ret = -1; goto end; } @@ -850,12 +1148,14 @@ int init_event_header(struct bt_ctf_stream_class *stream_class) ret = bt_ctf_field_type_structure_add_field(event_header_type, _uint32_t, "id"); if (ret) { + BT_LOGE_STR("Cannot add `id` field to event header field type."); goto end; } ret = bt_ctf_field_type_structure_add_field(event_header_type, _uint64_t, "timestamp"); if (ret) { + BT_LOGE_STR("Cannot add `timestamp` field to event header field type."); goto end; } @@ -880,6 +1180,7 @@ int init_packet_context(struct bt_ctf_stream_class *stream_class) get_field_type(FIELD_TYPE_ALIAS_UINT64_T); if (!packet_context_type) { + BT_LOGE_STR("Cannot create empty structure field type."); ret = -1; goto end; } @@ -891,30 +1192,35 @@ int init_packet_context(struct bt_ctf_stream_class *stream_class) ret = bt_ctf_field_type_structure_add_field(packet_context_type, _uint64_t, "timestamp_begin"); if (ret) { + BT_LOGE_STR("Cannot add `timestamp_begin` field to event header field type."); goto end; } ret = bt_ctf_field_type_structure_add_field(packet_context_type, _uint64_t, "timestamp_end"); if (ret) { + BT_LOGE_STR("Cannot add `timestamp_end` field to event header field type."); goto end; } ret = bt_ctf_field_type_structure_add_field(packet_context_type, _uint64_t, "content_size"); if (ret) { + BT_LOGE_STR("Cannot add `content_size` field to event header field type."); goto end; } ret = bt_ctf_field_type_structure_add_field(packet_context_type, _uint64_t, "packet_size"); if (ret) { + BT_LOGE_STR("Cannot add `packet_size` field to event header field type."); goto end; } ret = bt_ctf_field_type_structure_add_field(packet_context_type, _uint64_t, "events_discarded"); if (ret) { + BT_LOGE_STR("Cannot add `events_discarded` field to event header field type."); goto end; } -- 2.34.1