From bca31c38467c56b88d0e390bca21b13bab9cb425 Mon Sep 17 00:00:00 2001 From: Iliya Katushenock Date: Mon, 11 Mar 2024 19:17:27 +0100 Subject: [PATCH] Fix: handle cyclic links when detecting dangling reroutes Fix of error from 95810eec8f50429824fcf218d5fffaf67bfbbe5f Pull Request: https://projects.blender.org/blender/blender/pulls/119335 --- source/blender/blenkernel/intern/node.cc | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/source/blender/blenkernel/intern/node.cc b/source/blender/blenkernel/intern/node.cc index 6d722807fd9..fab68a2badc 100644 --- a/source/blender/blenkernel/intern/node.cc +++ b/source/blender/blenkernel/intern/node.cc @@ -2488,14 +2488,17 @@ bool nodeIsDanglingReroute(const bNodeTree *ntree, const bNode *node) { ntree->ensure_topology_cache(); BLI_assert(node_tree_runtime::topology_cache_is_available(*ntree)); - BLI_assert(!ntree->has_available_link_cycle()); const bNode *iter_node = node; - if (!iter_node->is_reroute()) { - return false; - } - + Set visited_nodes; while (true) { + if (!iter_node->is_reroute()) { + return false; + } + if (!visited_nodes.add(iter_node)) { + /* Treat cycle of reroute as dangling reroute branch. */ + return true; + } const Span links = iter_node->input_socket(0).directly_linked_links(); BLI_assert(links.size() <= 1); if (links.is_empty()) { @@ -2509,9 +2512,6 @@ bool nodeIsDanglingReroute(const bNodeTree *ntree, const bNode *node) return false; } iter_node = link.fromnode; - if (!iter_node->is_reroute()) { - return false; - } } }