[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [51009] trunk/blender/source/blender: freeing node trees no longer decreases their user counts, this cause causing invalid memory access when freeing the blend file.

Campbell Barton ideasman42 at gmail.com
Tue Oct 2 15:59:05 CEST 2012


Revision: 51009
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=51009
Author:   campbellbarton
Date:     2012-10-02 13:59:05 +0000 (Tue, 02 Oct 2012)
Log Message:
-----------
freeing node trees no longer decreases their user counts, this cause causing invalid memory access when freeing the blend file.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/node.c
    trunk/blender/source/blender/compositor/operations/COM_ZCombineOperation.cpp

Modified: trunk/blender/source/blender/blenkernel/intern/node.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/node.c	2012-10-02 13:24:28 UTC (rev 51008)
+++ trunk/blender/source/blender/blenkernel/intern/node.c	2012-10-02 13:59:05 UTC (rev 51009)
@@ -1047,7 +1047,15 @@
 /* same as ntreeFreeTree_ex but always manage users */
 void ntreeFreeTree(bNodeTree *ntree)
 {
+	/* XXX, this is correct, however when freeing the entire database
+	 * this ends up accessing freed data which isn't properly unlinking
+	 * its self from scene nodes, SO - for now prefer invalid usercounts
+	 * on free rather then bad memory access - Campbell */
+#if 0
 	ntreeFreeTree_ex(ntree, TRUE);
+#else
+	ntreeFreeTree_ex(ntree, FALSE);
+#endif
 }
 
 void ntreeFreeCache(bNodeTree *ntree)

Modified: trunk/blender/source/blender/compositor/operations/COM_ZCombineOperation.cpp
===================================================================
--- trunk/blender/source/blender/compositor/operations/COM_ZCombineOperation.cpp	2012-10-02 13:24:28 UTC (rev 51008)
+++ trunk/blender/source/blender/compositor/operations/COM_ZCombineOperation.cpp	2012-10-02 13:59:05 UTC (rev 51009)
@@ -79,10 +79,10 @@
 	}
 	float fac = color1[3];
 	float ifac = 1.0f - fac;
-	output[0] = fac*color1[0] + ifac * color2[0];
-	output[1] = fac*color1[1] + ifac * color2[1];
-	output[2] = fac*color1[2] + ifac * color2[2];
-	output[3] = MAX2(color1[3], color2[3]);
+	output[0] = fac * color1[0] + ifac * color2[0];
+	output[1] = fac * color1[1] + ifac * color2[1];
+	output[2] = fac * color1[2] + ifac * color2[2];
+	output[3] = max(color1[3], color2[3]);
 }
 
 void ZCombineOperation::deinitExecution()




More information about the Bf-blender-cvs mailing list