OSDN Git Service

fix [2542425] memory leak during video recording
authorMathias Agopian <mathias@google.com>
Tue, 30 Mar 2010 23:53:40 +0000 (16:53 -0700)
committerMathias Agopian <mathias@google.com>
Wed, 31 Mar 2010 02:02:59 +0000 (19:02 -0700)
[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

libs/utils/VectorImpl.cpp

index 0322af7..4954ffe 100644 (file)
@@ -351,6 +351,7 @@ void* VectorImpl::_grow(size_t where, size_t amount)
         {
             const SharedBuffer* cur_sb = SharedBuffer::sharedBuffer(mStorage);
             SharedBuffer* sb = cur_sb->editResize(new_capacity * mItemSize);
+            release_storage();
             mStorage = sb->data();
         } else {
             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);
             SharedBuffer* sb = cur_sb->editResize(new_capacity * mItemSize);
+            release_storage();
             mStorage = sb->data();
         } else {
             SharedBuffer* sb = SharedBuffer::alloc(new_capacity * mItemSize);