[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [50106] trunk/blender/source/blender/ blenkernel/intern: fix for bug where scene copy and free didn' t manage ID users.

Campbell Barton ideasman42 at gmail.com
Wed Aug 22 11:10:17 CEST 2012


Revision: 50106
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=50106
Author:   campbellbarton
Date:     2012-08-22 09:10:16 +0000 (Wed, 22 Aug 2012)
Log Message:
-----------
fix for bug where scene copy and free didn't manage ID users.

you could for eg, make a full copy of a scene, then manually remove its compo nodes - which would give invalid zero user count.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/node.c
    trunk/blender/source/blender/blenkernel/intern/scene.c

Modified: trunk/blender/source/blender/blenkernel/intern/node.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/node.c	2012-08-22 08:54:18 UTC (rev 50105)
+++ trunk/blender/source/blender/blenkernel/intern/node.c	2012-08-22 09:10:16 UTC (rev 50106)
@@ -704,7 +704,7 @@
 
 		/* ntreeUserDecrefID inline */
 		if (do_id_user) {
-			id_us_min(node->id);
+			id_us_plus(node->id);
 		}
 
 		if (do_make_extern) {

Modified: trunk/blender/source/blender/blenkernel/intern/scene.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/scene.c	2012-08-22 08:54:18 UTC (rev 50105)
+++ trunk/blender/source/blender/blenkernel/intern/scene.c	2012-08-22 09:10:16 UTC (rev 50106)
@@ -153,8 +153,9 @@
 		BKE_keyingsets_copy(&(scen->keyingsets), &(sce->keyingsets));
 
 		if (sce->nodetree) {
-			scen->nodetree = ntreeCopyTree_ex(sce->nodetree, FALSE); /* TODO: do_id_user arg needs checking */ /* copies actions */
-			ntreeSwitchID_ex(scen->nodetree, &sce->id, &scen->id, FALSE);
+			/* ID's are managed on both copy and switch */
+			scen->nodetree = ntreeCopyTree(sce->nodetree);
+			ntreeSwitchID(scen->nodetree, &sce->id, &scen->id);
 		}
 
 		obase = sce->base.first;
@@ -321,7 +322,7 @@
 	}
 	
 	if (sce->nodetree) {
-		ntreeFreeTree_ex(sce->nodetree, FALSE); /* TODO: do_id_user arg needs checking */
+		ntreeFreeTree(sce->nodetree);
 		MEM_freeN(sce->nodetree);
 	}
 




More information about the Bf-blender-cvs mailing list