diff options
author | Matt Ebb <matt@mke3.net> | 2007-08-14 08:38:31 +0400 |
---|---|---|
committer | Matt Ebb <matt@mke3.net> | 2007-08-14 08:38:31 +0400 |
commit | 5c1335a4a58801283c185bec8626f24edc2b3a44 (patch) | |
tree | be97d5a52bdfa663342a01c3e147886c5e94dd90 /source/blender/src/editnode.c | |
parent | 149d4ab4deac5f7affcf394091d3ee66550d9fb8 (diff) |
Fix for bug #7406 'Compositor Crash'
Previously when deleting a scene, no checks were made to see if
any render layer nodes in other scenes were referencing them,
leaving them pointing to bad memory. Now, this checks all other
scenes' nodetrees and sets pointers to the to-be-deleted scene to
NULL, which gets taken care of elsewhere.
Diffstat (limited to 'source/blender/src/editnode.c')
-rw-r--r-- | source/blender/src/editnode.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/source/blender/src/editnode.c b/source/blender/src/editnode.c index aa8dcc908c5..0b8e0776d93 100644 --- a/source/blender/src/editnode.c +++ b/source/blender/src/editnode.c @@ -1922,6 +1922,33 @@ void node_read_renderlayers(SpaceNode *snode) snode_handle_recalc(snode); } +/* called from header_info, when deleting a scene + * goes over all scenes other than the input, checks if they have + * render layer nodes referencing the to-be-deleted scene, and + * resets them to NULL. */ +void clear_scene_in_nodes(Scene *sce) +{ + Scene *sce1; + bNode *node; + + sce1= G.main->scene.first; + while(sce1) { + if(sce1!=sce) { + if (sce1->nodetree) { + for(node= sce1->nodetree->nodes.first; node; node= node->next) { + if(node->type==CMP_NODE_R_LAYERS) { + Scene *nodesce= (Scene *)node->id; + + if (nodesce==sce) node->id = NULL; + } + } + } + } + sce1= sce1->id.next; + } +} + + /* gets active viewer user */ struct ImageUser *ntree_get_active_iuser(bNodeTree *ntree) { |