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:
authorLukas Tönne <lukas.toenne@gmail.com>2014-08-12 14:41:26 +0400
committerLukas Tönne <lukas.toenne@gmail.com>2014-08-12 14:44:47 +0400
commit1743c81ce1b01e89728f98ea66ba1c07192bcff9 (patch)
tree6798293f18ad84919a4c73c10f23edd7e9b8e8ec /source/blender/nodes/intern
parent2b1bacddec586ce5f92278310b813c3c4d2359c2 (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/intern')
-rw-r--r--source/blender/nodes/intern/node_exec.c4
1 files changed, 3 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);
}