[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [50974] trunk/blender/source/blender: fix for some errors when unlinking.

Campbell Barton ideasman42 at gmail.com
Mon Oct 1 09:54:37 CEST 2012


Revision: 50974
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=50974
Author:   campbellbarton
Date:     2012-10-01 07:54:37 +0000 (Mon, 01 Oct 2012)
Log Message:
-----------
fix for some errors when unlinking.
- movieclip unlink didn't clear node ID pointers from the scene (leaving dangling pointers).
- mask datablock unlink was clearning references from scene nodes twice.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_node.h
    trunk/blender/source/blender/blenkernel/intern/mask.c
    trunk/blender/source/blender/blenkernel/intern/movieclip.c
    trunk/blender/source/blender/nodes/intern/node_common.c

Modified: trunk/blender/source/blender/blenkernel/BKE_node.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_node.h	2012-10-01 07:53:54 UTC (rev 50973)
+++ trunk/blender/source/blender/blenkernel/BKE_node.h	2012-10-01 07:54:37 UTC (rev 50974)
@@ -475,6 +475,8 @@
 void register_node_type_frame(struct bNodeTreeType *ttype);
 void register_node_type_reroute(struct bNodeTreeType *ttype);
 
+void BKE_node_tree_unlink_id_cb(void *calldata, struct ID *owner_id, struct bNodeTree *ntree);
+
 /* ************** SHADER NODES *************** */
 
 struct ShadeInput;

Modified: trunk/blender/source/blender/blenkernel/intern/mask.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/mask.c	2012-10-01 07:53:54 UTC (rev 50973)
+++ trunk/blender/source/blender/blenkernel/intern/mask.c	2012-10-01 07:54:37 UTC (rev 50974)
@@ -916,19 +916,6 @@
 	BKE_mask_layer_free_list(&mask->masklayers);
 }
 
-
-static void ntree_unlink_mask_cb(void *calldata, struct ID *UNUSED(owner_id), struct bNodeTree *ntree)
-{
-	ID *id = (ID *)calldata;
-	bNode *node;
-
-	for (node = ntree->nodes.first; node; node = node->next) {
-		if (node->id == id) {
-			node->id = NULL;
-		}
-	}
-}
-
 void BKE_mask_free(Main *bmain, Mask *mask)
 {
 	bScreen *scr;
@@ -975,21 +962,11 @@
 			}
 			SEQ_END
 		}
-
-
-		if (scene->nodetree) {
-			bNode *node;
-			for (node = scene->nodetree->nodes.first; node; node = node->next) {
-				if (node->id == &mask->id) {
-					node->id = NULL;
-				}
-			}
-		}
 	}
 
 	{
 		bNodeTreeType *treetype = ntreeGetType(NTREE_COMPOSIT);
-		treetype->foreach_nodetree(bmain, (void *)mask, &ntree_unlink_mask_cb);
+		treetype->foreach_nodetree(bmain, (void *)mask, &BKE_node_tree_unlink_id_cb);
 	}
 
 	/* free mask data */

Modified: trunk/blender/source/blender/blenkernel/intern/movieclip.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/movieclip.c	2012-10-01 07:53:54 UTC (rev 50973)
+++ trunk/blender/source/blender/blenkernel/intern/movieclip.c	2012-10-01 07:54:37 UTC (rev 50974)
@@ -52,6 +52,7 @@
 #include "DNA_screen_types.h"
 #include "DNA_space_types.h"
 #include "DNA_movieclip_types.h"
+#include "DNA_node_types.h"
 #include "DNA_object_types.h"
 #include "DNA_scene_types.h"
 #include "DNA_view3d_types.h"
@@ -71,6 +72,7 @@
 #include "BKE_global.h"
 #include "BKE_main.h"
 #include "BKE_movieclip.h"
+#include "BKE_node.h"
 #include "BKE_image.h"  /* openanim */
 #include "BKE_tracking.h"
 
@@ -1326,6 +1328,11 @@
 		}
 	}
 
+	{
+		bNodeTreeType *treetype = ntreeGetType(NTREE_COMPOSIT);
+		treetype->foreach_nodetree(bmain, (void *)clip, &BKE_node_tree_unlink_id_cb);
+	}
+
 	clip->id.us = 0;
 }
 

Modified: trunk/blender/source/blender/nodes/intern/node_common.c
===================================================================
--- trunk/blender/source/blender/nodes/intern/node_common.c	2012-10-01 07:53:54 UTC (rev 50973)
+++ trunk/blender/source/blender/nodes/intern/node_common.c	2012-10-01 07:54:37 UTC (rev 50974)
@@ -650,3 +650,15 @@
 		if (node->type == NODE_REROUTE && !node->done)
 			node_reroute_inherit_type_recursive(ntree, node);
 }
+
+void BKE_node_tree_unlink_id_cb(void *calldata, struct ID *UNUSED(owner_id), struct bNodeTree *ntree)
+{
+	ID *id = (ID *)calldata;
+	bNode *node;
+
+	for (node = ntree->nodes.first; node; node = node->next) {
+		if (node->id == id) {
+			node->id = NULL;
+		}
+	}
+}




More information about the Bf-blender-cvs mailing list