diff options
author | Marc Gilleron <marc.gilleron@gmail.com> | 2017-06-16 02:39:16 +0200 |
---|---|---|
committer | Marc Gilleron <marc.gilleron@gmail.com> | 2017-06-16 02:39:16 +0200 |
commit | 4dbe0967d5fb99a57786649ad9a00785e5fcb621 (patch) | |
tree | 7201f8526617e2ff065c6d468092d6ddb38fd545 /core | |
parent | 43a84429ff2fb0ba120f38797dcf313370b3bd18 (diff) |
Fixed memory leaks
- PoolVector leak
- mesh_remove_surface leak
Diffstat (limited to 'core')
-rw-r--r-- | core/dvector.h | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/core/dvector.h b/core/dvector.h index 2e951b9661..4584a300f9 100644 --- a/core/dvector.h +++ b/core/dvector.h @@ -92,6 +92,7 @@ class PoolVector { // ERR_FAIL_COND(alloc->lock>0); should not be illegal to lock this for copy on write, as it's a copy on write after all + // Refcount should not be zero, otherwise it's a misuse of COW if (alloc->refcount.get() == 1) return; //nothing to do @@ -216,7 +217,12 @@ class PoolVector { { int cur_elements = alloc->size / sizeof(T); - Write w = write(); + + // Don't use write() here because it could otherwise provoke COW, + // which is not desirable here because we are destroying the last reference anyways + Write w; + // Reference to still prevent other threads from touching the alloc + w._ref(alloc); for (int i = 0; i < cur_elements; i++) { |