[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