diff --git a/editor/src/messages/portfolio/document/utility_types/network_interface.rs b/editor/src/messages/portfolio/document/utility_types/network_interface.rs index b1aa205e..b3ae9797 100644 --- a/editor/src/messages/portfolio/document/utility_types/network_interface.rs +++ b/editor/src/messages/portfolio/document/utility_types/network_interface.rs @@ -4262,11 +4262,6 @@ impl NodeNetworkInterface { } } - let previous_metadata = match &previous_input { - NodeInput::Node { node_id, .. } => self.position(node_id, network_path).map(|position| (*node_id, position)), - _ => None, - }; - let Some(network) = self.network_mut(network_path) else { log::error!("Could not get nested network in set_input"); return; @@ -4303,6 +4298,12 @@ impl NodeNetworkInterface { return; } + // It is necessary to ensure the grpah is acyclic before calling `self.position` as it sometimes crashes with cyclic graphs #3227 + let previous_metadata = match &previous_input { + NodeInput::Node { node_id, .. } => self.position(node_id, network_path).map(|position| (*node_id, position)), + _ => None, + }; + self.transaction_modified(); // Ensure layer is toggled to non layer if it is no longer eligible to be a layer