diff options
author | Lukas Tönne <lukas.toenne@gmail.com> | 2014-08-12 14:41:26 +0400 |
---|---|---|
committer | Lukas Tönne <lukas.toenne@gmail.com> | 2014-08-12 14:44:47 +0400 |
commit | 1743c81ce1b01e89728f98ea66ba1c07192bcff9 (patch) | |
tree | 6798293f18ad84919a4c73c10f23edd7e9b8e8ec /source/blender/nodes | |
parent | 2b1bacddec586ce5f92278310b813c3c4d2359c2 (diff) |
Fix T41349: Muting texture nodes can cause crashes.
Problem is that setup of stack indices which refer to the same stack
entry can lead to cyclic TexDelegate node pointers, causing an infinite
loop.
Fixing this would take too much time and require recoding large parts of
the texnodes system, which is earmarked for scrapping anyway ... So for
now just disabled muting in texnodes to avoid crashes.
Diffstat (limited to 'source/blender/nodes')
-rw-r--r-- | source/blender/nodes/intern/node_exec.c | 4 | ||||
-rw-r--r-- | source/blender/nodes/texture/node_texture_tree.c | 9 |
2 files changed, 12 insertions, 1 deletions
diff --git a/source/blender/nodes/intern/node_exec.c b/source/blender/nodes/intern/node_exec.c index ec481839a16..0893d2022a0 100644 --- a/source/blender/nodes/intern/node_exec.c +++ b/source/blender/nodes/intern/node_exec.c @@ -159,6 +159,8 @@ bNodeTreeExec *ntree_exec_begin(bNodeExecContext *context, bNodeTree *ntree, bNo int index; bNode **nodelist; int totnodes, n; + /* XXX texnodes have threading issues with muting, have to disable it there ... */ + bool use_muting = (ntree->type != NTREE_TEXTURE); /* ensure all sock->link pointers and node levels are correct */ ntreeUpdateTree(G.main, ntree); @@ -182,7 +184,7 @@ bNodeTreeExec *ntree_exec_begin(bNodeExecContext *context, bNodeTree *ntree, bNo for (sock = node->inputs.first; sock; sock = sock->next) node_init_input_index(sock, &index); - if (node->flag & NODE_MUTED || node->type == NODE_REROUTE) { + if (use_muting && (node->flag & NODE_MUTED || node->type == NODE_REROUTE)) { for (sock = node->outputs.first; sock; sock = sock->next) node_init_output_index(sock, &index, &node->internal_links); } diff --git a/source/blender/nodes/texture/node_texture_tree.c b/source/blender/nodes/texture/node_texture_tree.c index c0c5787b765..02f15705ad1 100644 --- a/source/blender/nodes/texture/node_texture_tree.c +++ b/source/blender/nodes/texture/node_texture_tree.c @@ -137,6 +137,10 @@ static void foreach_nodeclass(Scene *UNUSED(scene), void *calldata, bNodeClassCa func(calldata, NODE_CLASS_LAYOUT, N_("Layout")); } +/* XXX muting disabled in previews because of threading issues with the main execution + * it works here, but disabled for consistency + */ +#if 0 static void localize(bNodeTree *localtree, bNodeTree *UNUSED(ntree)) { bNode *node, *node_next; @@ -151,6 +155,11 @@ static void localize(bNodeTree *localtree, bNodeTree *UNUSED(ntree)) } } } +#else +static void localize(bNodeTree *UNUSED(localtree), bNodeTree *UNUSED(ntree)) +{ +} +#endif static void local_sync(bNodeTree *localtree, bNodeTree *ntree) { |