From 90bd5941399f62f7792d6f22103f2c0aaa913e25 Mon Sep 17 00:00:00 2001 From: Philippe Proulx Date: Mon, 19 Jun 2017 18:52:09 -0400 Subject: [PATCH] lib/graph/notification/stream.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 --- lib/graph/notification/stream.c | 130 ++++++++++++++++++++++++++++++-- 1 file changed, 124 insertions(+), 6 deletions(-) diff --git a/lib/graph/notification/stream.c b/lib/graph/notification/stream.c index 68b999c0..40c245b5 100644 --- a/lib/graph/notification/stream.c +++ b/lib/graph/notification/stream.c @@ -24,9 +24,13 @@ * SOFTWARE. */ +#define BT_LOG_TAG "NOTIF-STREAM" +#include + #include #include #include +#include static void bt_notification_stream_end_destroy(struct bt_object *obj) @@ -34,6 +38,9 @@ void bt_notification_stream_end_destroy(struct bt_object *obj) struct bt_notification_stream_end *notification = (struct bt_notification_stream_end *) obj; + BT_LOGD("Destroying stream end notification: addr=%p", + notification); + BT_LOGD_STR("Putting stream."); BT_PUT(notification->stream); g_free(notification); } @@ -42,29 +49,83 @@ struct bt_notification *bt_notification_stream_end_create( struct bt_ctf_stream *stream) { struct bt_notification_stream_end *notification; + struct bt_ctf_stream_class *stream_class; - if (!stream || stream->pos.fd >= 0) { + if (!stream) { + BT_LOGW_STR("Invalid parameter: stream is NULL."); goto error; } + stream_class = bt_ctf_stream_borrow_stream_class(stream); + assert(stream_class); + + if (stream->pos.fd >= 0) { + BT_LOGW("Invalid parameter: stream is a CTF writer stream: " + "stream-addr=%p, stream-name=\"%s\", " + "stream-class-addr=%p, stream-class-name\"%s\", " + "stream-class-id=%" PRId64, + stream, bt_ctf_stream_get_name(stream), stream_class, + bt_ctf_stream_class_get_name(stream_class), + bt_ctf_stream_class_get_id(stream_class)); + goto error; + } + + BT_LOGD("Creating stream end notification object: " + "stream-addr=%p, stream-name=\"%s\", " + "stream-class-addr=%p, stream-class-name=\"%s\", " + "stream-class-id=%" PRId64, + stream, bt_ctf_stream_get_name(stream), + stream_class, + bt_ctf_stream_class_get_name(stream_class), + bt_ctf_stream_class_get_id(stream_class)); notification = g_new0(struct bt_notification_stream_end, 1); + if (!notification) { + BT_LOGE_STR("Failed to allocate one stream end notification."); + goto error; + } + bt_notification_init(¬ification->parent, BT_NOTIFICATION_TYPE_STREAM_END, bt_notification_stream_end_destroy); notification->stream = bt_get(stream); + BT_LOGD("Created stream end notification object: " + "stream-addr=%p, stream-name=\"%s\", " + "stream-class-addr=%p, stream-class-name=\"%s\", " + "stream-class-id=%" PRId64 ", addr=%p", + stream, bt_ctf_stream_get_name(stream), + stream_class, + bt_ctf_stream_class_get_name(stream_class), + bt_ctf_stream_class_get_id(stream_class), notification); return ¬ification->parent; error: return NULL; } -struct bt_ctf_packet *bt_notification_stream_end_get_stream( +struct bt_ctf_stream *bt_notification_stream_end_get_stream( struct bt_notification *notification) { struct bt_notification_stream_end *stream_end; + struct bt_ctf_stream *stream = NULL; + + if (!notification) { + BT_LOGW_STR("Invalid parameter: notification is NULL."); + goto end; + } + + if (notification->type != BT_NOTIFICATION_TYPE_STREAM_END) { + BT_LOGW("Invalid parameter: notification is not a stream end notification: " + "addr%p, notif-type=%s", + notification, bt_notification_type_string( + bt_notification_get_type(notification))); + goto end; + } stream_end = container_of(notification, struct bt_notification_stream_end, parent); - return bt_get(stream_end->stream); + stream = bt_get(stream_end->stream); + +end: + return stream; } static @@ -73,6 +134,9 @@ void bt_notification_stream_begin_destroy(struct bt_object *obj) struct bt_notification_stream_begin *notification = (struct bt_notification_stream_begin *) obj; + BT_LOGD("Destroying stream beginning notification: addr=%p", + notification); + BT_LOGD_STR("Putting stream."); BT_PUT(notification->stream); g_free(notification); } @@ -81,27 +145,81 @@ struct bt_notification *bt_notification_stream_begin_create( struct bt_ctf_stream *stream) { struct bt_notification_stream_begin *notification; + struct bt_ctf_stream_class *stream_class; - if (!stream || stream->pos.fd >= 0) { + if (!stream) { + BT_LOGW_STR("Invalid parameter: stream is NULL."); goto error; } + stream_class = bt_ctf_stream_borrow_stream_class(stream); + assert(stream_class); + + if (stream->pos.fd >= 0) { + BT_LOGW("Invalid parameter: stream is a CTF writer stream: " + "stream-addr=%p, stream-name=\"%s\", " + "stream-class-addr=%p, stream-class-name\"%s\", " + "stream-class-id=%" PRId64, + stream, bt_ctf_stream_get_name(stream), stream_class, + bt_ctf_stream_class_get_name(stream_class), + bt_ctf_stream_class_get_id(stream_class)); + goto error; + } + + BT_LOGD("Creating stream beginning notification object: " + "stream-addr=%p, stream-name=\"%s\", " + "stream-class-addr=%p, stream-class-name=\"%s\", " + "stream-class-id=%" PRId64, + stream, bt_ctf_stream_get_name(stream), + stream_class, + bt_ctf_stream_class_get_name(stream_class), + bt_ctf_stream_class_get_id(stream_class)); notification = g_new0(struct bt_notification_stream_begin, 1); + if (!notification) { + BT_LOGE_STR("Failed to allocate one stream beginning notification."); + goto error; + } + bt_notification_init(¬ification->parent, BT_NOTIFICATION_TYPE_STREAM_BEGIN, bt_notification_stream_begin_destroy); notification->stream = bt_get(stream); + BT_LOGD("Created stream beginning notification object: " + "stream-addr=%p, stream-name=\"%s\", " + "stream-class-addr=%p, stream-class-name=\"%s\", " + "stream-class-id=%" PRId64 ", addr=%p", + stream, bt_ctf_stream_get_name(stream), + stream_class, + bt_ctf_stream_class_get_name(stream_class), + bt_ctf_stream_class_get_id(stream_class), notification); return ¬ification->parent; error: return NULL; } -struct bt_ctf_packet *bt_notification_stream_begin_get_stream( +struct bt_ctf_stream *bt_notification_stream_begin_get_stream( struct bt_notification *notification) { struct bt_notification_stream_begin *stream_begin; + struct bt_ctf_stream *stream = NULL; + + if (!notification) { + BT_LOGW_STR("Invalid parameter: notification is NULL."); + goto end; + } + + if (notification->type != BT_NOTIFICATION_TYPE_STREAM_BEGIN) { + BT_LOGW("Invalid parameter: notification is not a stream beginning notification: " + "addr%p, notif-type=%s", + notification, bt_notification_type_string( + bt_notification_get_type(notification))); + goto end; + } stream_begin = container_of(notification, struct bt_notification_stream_begin, parent); - return bt_get(stream_begin->stream); + stream = bt_get(stream_begin->stream); + +end: + return stream; } -- 2.34.1