[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [12924] trunk/blender/source/blender/ blenkernel:

Brecht Van Lommel brechtvanlommel at pandora.be
Mon Dec 17 12:47:24 CET 2007


Revision: 12924
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=12924
Author:   blendix
Date:     2007-12-17 12:47:24 +0100 (Mon, 17 Dec 2007)

Log Message:
-----------

Bugfix: memory leak with multi-modifier, if the modifier
using the previous coordinates was disabled.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_modifier.h
    trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c
    trunk/blender/source/blender/blenkernel/intern/modifier.c

Modified: trunk/blender/source/blender/blenkernel/BKE_modifier.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_modifier.h	2007-12-17 11:32:52 UTC (rev 12923)
+++ trunk/blender/source/blender/blenkernel/BKE_modifier.h	2007-12-17 11:47:24 UTC (rev 12924)
@@ -292,6 +292,7 @@
 struct Object *modifiers_isDeformedByLattice(struct Object *ob);
 int           modifiers_usesArmature(struct Object *ob, struct bArmature *arm);
 int           modifiers_isDeformed(struct Object *ob);
+void          modifier_freeTemporaryData(struct ModifierData *md);
 
 int           modifiers_indexInObject(struct Object *ob, struct ModifierData *md);
 

Modified: trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c	2007-12-17 11:32:52 UTC (rev 12923)
+++ trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c	2007-12-17 11:47:24 UTC (rev 12924)
@@ -1877,7 +1877,7 @@
                                 int needMapping, CustomDataMask dataMask)
 {
 	Mesh *me = ob->data;
-	ModifierData *md = modifiers_getVirtualModifierList(ob);
+	ModifierData *firstmd, *md;
 	LinkNode *datamasks, *curr;
 	CustomDataMask mask;
 	float (*deformedVerts)[3] = NULL;
@@ -1886,6 +1886,8 @@
 	int fluidsimMeshUsed = 0;
 	int required_mode;
 
+	md = firstmd = modifiers_getVirtualModifierList(ob);
+
 	modifiers_clearErrors(ob);
 
 	/* we always want to keep original indices */
@@ -2097,6 +2099,9 @@
 		}
 	}
 
+	for(md=first; md; md=md->next)
+		modifier_freeTemporaryData(md);
+
 	/* Yay, we are done. If we have a DerivedMesh and deformed vertices
 	 * need to apply these back onto the DerivedMesh. If we have no
 	 * DerivedMesh then we need to build one.

Modified: trunk/blender/source/blender/blenkernel/intern/modifier.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/modifier.c	2007-12-17 11:32:52 UTC (rev 12923)
+++ trunk/blender/source/blender/blenkernel/intern/modifier.c	2007-12-17 11:47:24 UTC (rev 12924)
@@ -7219,3 +7219,14 @@
 	return 0;
 }
 
+void modifier_freeTemporaryData(ModifierData *md)
+{
+	if(md->type == eModifierType_Armature) {
+		ArmatureModifierData *amd= (ArmatureModifierData*)md;
+
+		if(amd->prevCos)
+			MEM_freeN(amd->prevCos);
+	}
+}
+
+





More information about the Bf-blender-cvs mailing list