From df14f8afe4ec194b84a7c9e2fe1354951d6cca94 Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Mon, 15 May 2017 16:44:09 -0400 Subject: [PATCH] Fix: don't call iterator finalize more than once MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit A finalize may have side-effects that trigger port removal, thus calling finalize again. Ensure it is not called more than once. Signed-off-by: Mathieu Desnoyers Signed-off-by: Jérémie Galarneau --- lib/graph/iterator.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/graph/iterator.c b/lib/graph/iterator.c index 1bfe3495..bda2dfd3 100644 --- a/lib/graph/iterator.c +++ b/lib/graph/iterator.c @@ -349,6 +349,12 @@ void bt_notification_iterator_finalize( break; } + if (iterator->state == BT_NOTIFICATION_ITERATOR_STATE_ENDED) { + iterator->state = BT_NOTIFICATION_ITERATOR_STATE_FINALIZED_AND_ENDED; + } else { + iterator->state = BT_NOTIFICATION_ITERATOR_STATE_FINALIZED; + } + assert(iterator->upstream_component); comp_class = iterator->upstream_component->class; @@ -380,12 +386,6 @@ void bt_notification_iterator_finalize( bt_private_notification_iterator_from_notification_iterator(iterator)); } - if (iterator->state == BT_NOTIFICATION_ITERATOR_STATE_ENDED) { - iterator->state = BT_NOTIFICATION_ITERATOR_STATE_FINALIZED_AND_ENDED; - } else { - iterator->state = BT_NOTIFICATION_ITERATOR_STATE_FINALIZED; - } - iterator->upstream_component = NULL; iterator->upstream_port = NULL; } -- 2.34.1