From: Philippe Proulx Date: Thu, 3 Aug 2017 20:33:39 +0000 (-0400) Subject: lib: do not finalize a non-initialized notification iterator X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=commitdiff_plain;h=088d4023b8df17d8cc6f354f15aa1d81038a1c13 lib: do not finalize a non-initialized notification iterator Signed-off-by: Philippe Proulx Signed-off-by: Jérémie Galarneau --- diff --git a/include/babeltrace/graph/notification-iterator-internal.h b/include/babeltrace/graph/notification-iterator-internal.h index 9fcab16a..567c4738 100644 --- a/include/babeltrace/graph/notification-iterator-internal.h +++ b/include/babeltrace/graph/notification-iterator-internal.h @@ -34,6 +34,7 @@ #include #include #include +#include struct bt_port; @@ -49,6 +50,9 @@ enum bt_notification_iterator_notif_type { }; enum bt_notification_iterator_state { + /* Iterator is not initialized. */ + BT_NOTIFICATION_ITERATOR_STATE_NON_INITIALIZED, + /* Iterator is active, not at the end yet, and not finalized. */ BT_NOTIFICATION_ITERATOR_STATE_ACTIVE, diff --git a/lib/graph/connection.c b/lib/graph/connection.c index ef4fefed..f3fbe7c0 100644 --- a/lib/graph/connection.c +++ b/lib/graph/connection.c @@ -395,6 +395,7 @@ bt_private_connection_create_notification_iterator( } } + iterator->state = BT_NOTIFICATION_ITERATOR_STATE_ACTIVE; g_ptr_array_add(connection->iterators, iterator); BT_LOGD("Created notification iterator from connection: " "conn-addr=%p, upstream-port-addr=%p, " diff --git a/lib/graph/iterator.c b/lib/graph/iterator.c index cc1228ba..f5dd6d70 100644 --- a/lib/graph/iterator.c +++ b/lib/graph/iterator.c @@ -445,6 +445,11 @@ void bt_notification_iterator_finalize( assert(iterator); switch (iterator->state) { + case BT_NOTIFICATION_ITERATOR_STATE_NON_INITIALIZED: + /* Skip user finalization if user initialization failed */ + BT_LOGD("Not finalizing non-initialized notification iterator: " + "addr=%p", iterator); + return; case BT_NOTIFICATION_ITERATOR_STATE_FINALIZED: case BT_NOTIFICATION_ITERATOR_STATE_FINALIZED_AND_ENDED: /* Already finalized */ @@ -649,7 +654,7 @@ enum bt_connection_status bt_notification_iterator_create( iterator->upstream_component = upstream_comp; iterator->upstream_port = upstream_port; iterator->connection = connection; - iterator->state = BT_NOTIFICATION_ITERATOR_STATE_ACTIVE; + iterator->state = BT_NOTIFICATION_ITERATOR_STATE_NON_INITIALIZED; BT_LOGD("Created notification iterator: " "upstream-comp-addr=%p, upstream-comp-name=\"%s\", " "upstream-port-addr=%p, upstream-port-name=\"%s\", "