From: Mathieu Desnoyers Date: Mon, 15 May 2017 20:44:09 +0000 (-0400) Subject: Fix: don't call iterator finalize more than once X-Git-Tag: v2.0.0-pre1~243 X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=commitdiff_plain;h=df14f8afe4ec194b84a7c9e2fe1354951d6cca94 Fix: don't call iterator finalize more than once 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 --- 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; }