lib/ctf-ir/stream-class.c: add logging
authorPhilippe Proulx <eeppeliteloop@gmail.com>
Sun, 14 May 2017 06:05:28 +0000 (02:05 -0400)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Sun, 28 May 2017 16:57:43 +0000 (12:57 -0400)
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
include/babeltrace/ctf-ir/stream-class-internal.h
lib/ctf-ir/stream-class.c

index 0dc33b136420891913a7cc7ec5b15d58c66cb185..7e5dcb9b1bca71fbbea0fd0ea712be2e095a723e 100644 (file)
@@ -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
index 4da65f329575e220754f4d970bf0b375376037ec..0e3a33bcf909295acdfebf20290195dd7f5e3c45 100644 (file)
@@ -26,6 +26,9 @@
  * SOFTWARE.
  */
 
+#define BT_LOG_TAG "STREAM-CLASS"
+#include <babeltrace/lib-logging-internal.h>
+
 #include <babeltrace/ctf-writer/clock.h>
 #include <babeltrace/ctf-writer/clock-internal.h>
 #include <babeltrace/ctf-ir/clock-class-internal.h>
@@ -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;
        }
 
This page took 0.038058 seconds and 4 git commands to generate.