diff options
author | Campbell Barton <ideasman42@gmail.com> | 2013-02-11 08:43:49 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2013-02-11 08:43:49 +0400 |
commit | 0ac2f6e7d73bda112db13205d4b91ad98fa975ee (patch) | |
tree | 6e0dc34c947a461b846dba16dc220e48a288414d /source/blender/blenkernel | |
parent | 20139348785dcd23ebe00db25f5e5726a23c685f (diff) |
fix for own bug - memory leak when cancelling weight gradient tool
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r-- | source/blender/blenkernel/BKE_deform.h | 1 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/deform.c | 16 |
2 files changed, 15 insertions, 2 deletions
diff --git a/source/blender/blenkernel/BKE_deform.h b/source/blender/blenkernel/BKE_deform.h index ab27421b383..0fa7356b64e 100644 --- a/source/blender/blenkernel/BKE_deform.h +++ b/source/blender/blenkernel/BKE_deform.h @@ -56,6 +56,7 @@ void defvert_remove_group(struct MDeformVert *dvert, struct void defvert_clear(struct MDeformVert *dvert); int defvert_find_shared(const struct MDeformVert *dvert_a, const struct MDeformVert *dvert_b); +void BKE_defvert_array_free_elems(struct MDeformVert *dvert, int totvert); void BKE_defvert_array_free(struct MDeformVert *dvert, int totvert); void BKE_defvert_array_copy(struct MDeformVert *dst, const struct MDeformVert *src, int totvert); diff --git a/source/blender/blenkernel/intern/deform.c b/source/blender/blenkernel/intern/deform.c index cea92d53916..de15100de0b 100644 --- a/source/blender/blenkernel/intern/deform.c +++ b/source/blender/blenkernel/intern/deform.c @@ -809,7 +809,7 @@ void BKE_defvert_array_copy(MDeformVert *dst, const MDeformVert *src, int copyco } -void BKE_defvert_array_free(MDeformVert *dvert, int totvert) +void BKE_defvert_array_free_elems(MDeformVert *dvert, int totvert) { /* Instead of freeing the verts directly, * call this function to delete any special @@ -823,6 +823,18 @@ void BKE_defvert_array_free(MDeformVert *dvert, int totvert) for (i = 0; i < totvert; i++) { if (dvert[i].dw) MEM_freeN(dvert[i].dw); } - MEM_freeN(dvert); } +void BKE_defvert_array_free(MDeformVert *dvert, int totvert) +{ + /* Instead of freeing the verts directly, + * call this function to delete any special + * vert data */ + if (!dvert) + return; + + /* Free any special data from the verts */ + BKE_defvert_array_free_elems(dvert, totvert); + + MEM_freeN(dvert); +} |