Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 77e26d68 authored by Mathias Agopian's avatar Mathias Agopian
Browse files

fix [2542425] memory leak during video recording

[Sorted|Keyed]Vector<TYPE> would leak their whole storage when resized
from the end and TYPE had trivial dtor and copy operators.

Change-Id: I8555bb1aa0863df72de27d67ae50e20706e90cf5
parent 964d29a9
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -351,6 +351,7 @@ void* VectorImpl::_grow(size_t where, size_t amount)
        {
        {
            const SharedBuffer* cur_sb = SharedBuffer::sharedBuffer(mStorage);
            const SharedBuffer* cur_sb = SharedBuffer::sharedBuffer(mStorage);
            SharedBuffer* sb = cur_sb->editResize(new_capacity * mItemSize);
            SharedBuffer* sb = cur_sb->editResize(new_capacity * mItemSize);
            release_storage();
            mStorage = sb->data();
            mStorage = sb->data();
        } else {
        } else {
            SharedBuffer* sb = SharedBuffer::alloc(new_capacity * mItemSize);
            SharedBuffer* sb = SharedBuffer::alloc(new_capacity * mItemSize);
@@ -403,6 +404,7 @@ void VectorImpl::_shrink(size_t where, size_t amount)
        {
        {
            const SharedBuffer* cur_sb = SharedBuffer::sharedBuffer(mStorage);
            const SharedBuffer* cur_sb = SharedBuffer::sharedBuffer(mStorage);
            SharedBuffer* sb = cur_sb->editResize(new_capacity * mItemSize);
            SharedBuffer* sb = cur_sb->editResize(new_capacity * mItemSize);
            release_storage();
            mStorage = sb->data();
            mStorage = sb->data();
        } else {
        } else {
            SharedBuffer* sb = SharedBuffer::alloc(new_capacity * mItemSize);
            SharedBuffer* sb = SharedBuffer::alloc(new_capacity * mItemSize);