From: Eunki, Hong Date: Tue, 21 Dec 2021 12:02:42 +0000 (+0900) Subject: [Tizen] Dali::Vector release memory later during Copy X-Git-Tag: accepted/tizen/6.5/unified/20220104.122946^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=be30ee953344a1567eb0a7163d36f1871b1c7ec3;hp=5ba7052a761565f20dbf66f983f452de97dbe6fe;p=platform%2Fcore%2Fuifw%2Fdali-core.git [Tizen] Dali::Vector release memory later during Copy Change-Id: I16bcdca4737a9f754b22089873f4c42545ceae40 Signed-off-by: Eunki, Hong --- diff --git a/dali/public-api/common/dali-vector.cpp b/dali/public-api/common/dali-vector.cpp index 80b03a4..3ab1396 100644 --- a/dali/public-api/common/dali-vector.cpp +++ b/dali/public-api/common/dali-vector.cpp @@ -112,16 +112,19 @@ void VectorBase::Reserve(SizeType capacity, SizeType elementSize) void VectorBase::Copy(const VectorBase& vector, SizeType elementSize) { - // release old data - Release(); // reserve space based on source capacity - const SizeType capacity = vector.Capacity(); - Reserve(capacity, elementSize); - // copy over whole data + const SizeType capacity = vector.Capacity(); const SizeType wholeAllocation = sizeof(SizeType) * 2u + capacity * elementSize; - SizeType* srcData = reinterpret_cast(vector.mData); - SizeType* dstData = reinterpret_cast(mData); + void* wholeData = reinterpret_cast(new uint8_t[wholeAllocation]); + DALI_ASSERT_ALWAYS(wholeData && "VectorBase::Copy - Memory allocation failed"); + + // copy over whole data + SizeType* srcData = reinterpret_cast(vector.mData); + SizeType* dstData = reinterpret_cast(wholeData) + 2u; memcpy(dstData - 2u, srcData - 2u, wholeAllocation); + + // release old buffer and set new data as mData + Replace(reinterpret_cast(dstData)); } void VectorBase::Swap(VectorBase& vector)