From 355709432e4a6d2c1888025d46672f5bd16ab815 Mon Sep 17 00:00:00 2001 From: Bastien Montagne Date: Mon, 12 May 2014 21:30:27 +0200 Subject: [PATCH] Fix T40115: Smoke simulator memory leak with high poly mesh emitter. Own error, all kudos go to scorpion81 (Martin Felke) for the nvestigation & patch! --- source/blender/blenkernel/intern/smoke.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/source/blender/blenkernel/intern/smoke.c b/source/blender/blenkernel/intern/smoke.c index 74edd1902d8..55673a334b4 100644 --- a/source/blender/blenkernel/intern/smoke.c +++ b/source/blender/blenkernel/intern/smoke.c @@ -1552,8 +1552,7 @@ static void sample_derivedmesh( static void emit_from_derivedmesh(Object *flow_ob, SmokeDomainSettings *sds, SmokeFlowSettings *sfs, EmissionMap *em, float dt) { - if (!sfs->dm) return; - { + if (sfs->dm) { DerivedMesh *dm; int defgrp_index = sfs->vgroup_density - 1; MDeformVert *dvert = NULL; @@ -1684,10 +1683,17 @@ static void emit_from_derivedmesh(Object *flow_ob, SmokeDomainSettings *sds, Smo free_bvhtree_from_mesh(&treeData); /* restore original mverts */ CustomData_set_layer(&dm->vertData, CD_MVERT, mvert_orig); - if (mvert) - MEM_freeN(mvert); - if (vert_vel) MEM_freeN(vert_vel); + if (mvert) { + MEM_freeN(mvert); + } + if (vert_vel) { + MEM_freeN(vert_vel); + } + if (dm) { + dm->needsFree = 1; + dm->release(dm); + } } }