diff -r 62d3aecc5bb7 -r 4f02995ce44e src/tree.c --- a/src/tree.c Wed Feb 21 18:53:55 2024 +0100 +++ b/src/tree.c Mon Feb 26 21:07:23 2024 +0100 @@ -197,7 +197,12 @@ void *next; cx_tree_iter_search_next: // check if there is a sibling - next = tree_next(iter->node); + if (iter->exiting) { + next = iter->next; + } else { + next = tree_next(iter->node); + iter->next = next; + } if (next == NULL) { // no sibling, we are done with this node and exit if (iter->visit_on_exit && !iter->exiting) { @@ -208,7 +213,7 @@ if (iter->depth == 1) { // there is no parent - we have iterated the entire tree // invalidate the iterator and free the node stack - iter->node = NULL; + iter->node = iter->next = NULL; iter->stack_capacity = iter->depth = 0; free(iter->stack); iter->stack = NULL;