Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien Montagne <montagne29@wanadoo.fr>2016-01-04 19:23:39 +0300
committerBastien Montagne <montagne29@wanadoo.fr>2016-01-04 21:17:09 +0300
commit17eb5b3af6ffeeb8d931ceaaf56fe82e40d8c084 (patch)
tree6333e5411939ca222ade56893be6fa1358fc859c /source/blender/blenkernel/intern/pbvh.c
parent0b157f7c6cf3b0dfd7b3f2d0317739dc0dc1f236 (diff)
Fix (unreported) memleak related to PBVH and looptri.
Looptri are not mesh data, they are allocated and built for PBVH only, and totally 'local' to it, so duplicating like we do for verts & co leads to leaking memory.
Diffstat (limited to 'source/blender/blenkernel/intern/pbvh.c')
-rw-r--r--source/blender/blenkernel/intern/pbvh.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/source/blender/blenkernel/intern/pbvh.c b/source/blender/blenkernel/intern/pbvh.c
index 16ba25e3bef..699d70a59f4 100644
--- a/source/blender/blenkernel/intern/pbvh.c
+++ b/source/blender/blenkernel/intern/pbvh.c
@@ -523,7 +523,12 @@ static void pbvh_build(PBVH *bvh, BB *cb, BBC *prim_bbc, int totprim)
build_sub(bvh, 0, cb, prim_bbc, 0, totprim);
}
-/* Do a full rebuild with on Mesh data structure */
+/**
+ * Do a full rebuild with on Mesh data structure.
+ *
+ * \note Unlike mpoly/mloop/verts, looptri is **totally owned** by PBVH (which means it may rewrite it if needed,
+ * see BKE_pbvh_apply_vertCos().
+ */
void BKE_pbvh_build_mesh(
PBVH *bvh, const MPoly *mpoly, const MLoop *mloop, MVert *verts,
int totvert, struct CustomData *vdata,
@@ -1861,7 +1866,7 @@ void BKE_pbvh_apply_vertCos(PBVH *pbvh, float (*vertCos)[3])
/* unneeded deformation -- duplicate verts/faces to avoid this */
pbvh->verts = MEM_dupallocN(pbvh->verts);
- pbvh->looptri = MEM_dupallocN(pbvh->looptri);
+ /* No need to dupalloc pbvh->looptri, this one is 'totally owned' by pbvh, it's never some mesh data. */
pbvh->deformed = true;
}