Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacques Lucke <jacques@blender.org>2021-10-27 13:29:46 +0300
committerJacques Lucke <jacques@blender.org>2021-10-27 13:29:59 +0300
commitc06a86f99f5bd59e2f1c37b18f5e668da245a206 (patch)
tree1fda9694ccd190389fb29063cd04c4017a36e528 /source/blender/blenkernel
parentd161b5d204a585b910a47ca432544570ea10911e (diff)
Fix T92328: crash during field inferencing when there is a link cycle
The toposort did not handle link cycles which it should.
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r--source/blender/blenkernel/intern/node.cc8
1 files changed, 4 insertions, 4 deletions
diff --git a/source/blender/blenkernel/intern/node.cc b/source/blender/blenkernel/intern/node.cc
index d6c4e1f21e4..95192003f9f 100644
--- a/source/blender/blenkernel/intern/node.cc
+++ b/source/blender/blenkernel/intern/node.cc
@@ -4717,10 +4717,10 @@ static OutputFieldDependency find_group_output_dependencies(
static void propagate_data_requirements_from_right_to_left(
const NodeTreeRef &tree, const MutableSpan<SocketFieldState> field_state_by_socket_id)
{
- const Vector<const NodeRef *> sorted_nodes = tree.toposort(
+ const NodeTreeRef::ToposortResult toposort_result = tree.toposort(
NodeTreeRef::ToposortDirection::RightToLeft);
- for (const NodeRef *node : sorted_nodes) {
+ for (const NodeRef *node : toposort_result.sorted_nodes) {
const FieldInferencingInterface inferencing_interface = get_node_field_inferencing_interface(
*node);
@@ -4829,10 +4829,10 @@ static void determine_group_input_states(
static void propagate_field_status_from_left_to_right(
const NodeTreeRef &tree, const MutableSpan<SocketFieldState> field_state_by_socket_id)
{
- Vector<const NodeRef *> sorted_nodes = tree.toposort(
+ const NodeTreeRef::ToposortResult toposort_result = tree.toposort(
NodeTreeRef::ToposortDirection::LeftToRight);
- for (const NodeRef *node : sorted_nodes) {
+ for (const NodeRef *node : toposort_result.sorted_nodes) {
if (node->is_group_input_node()) {
continue;
}