Don't use C allocation in LLImage
because LLTextureCache/LLTextureFetch feed it new[]ed data!
This commit is contained in:
@@ -139,7 +139,7 @@ void LLImageBase::sanityCheck()
|
|||||||
void LLImageBase::deleteData()
|
void LLImageBase::deleteData()
|
||||||
{
|
{
|
||||||
if(mData)
|
if(mData)
|
||||||
free(mData);//delete[] mData;
|
delete[] mData;
|
||||||
mData = NULL;
|
mData = NULL;
|
||||||
mDataSize = 0;
|
mDataSize = 0;
|
||||||
}
|
}
|
||||||
@@ -166,17 +166,14 @@ U8* LLImageBase::allocateData(S32 size)
|
|||||||
{
|
{
|
||||||
deleteData(); // virtual
|
deleteData(); // virtual
|
||||||
mBadBufferAllocation = FALSE ;
|
mBadBufferAllocation = FALSE ;
|
||||||
U8 *data = (U8 *)realloc(mData,sizeof(U8)*size);//new U8[size];
|
mData = new U8[size];
|
||||||
if (!data)
|
if (!mData)
|
||||||
{
|
{
|
||||||
if(mData)
|
|
||||||
free(mData);
|
|
||||||
llwarns << "allocate image data: " << size << llendl;
|
llwarns << "allocate image data: " << size << llendl;
|
||||||
size = 0 ;
|
size = 0 ;
|
||||||
mWidth = mHeight = 0 ;
|
mWidth = mHeight = 0 ;
|
||||||
mBadBufferAllocation = TRUE ;
|
mBadBufferAllocation = TRUE ;
|
||||||
}
|
}
|
||||||
mData = data;
|
|
||||||
mDataSize = size;
|
mDataSize = size;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -186,17 +183,25 @@ U8* LLImageBase::allocateData(S32 size)
|
|||||||
// virtual
|
// virtual
|
||||||
U8* LLImageBase::reallocateData(S32 size)
|
U8* LLImageBase::reallocateData(S32 size)
|
||||||
{
|
{
|
||||||
LLMemType mt1((LLMemType::EMemType)mMemType);
|
if(mData && (mDataSize == size))
|
||||||
U8 *data = (U8 *)realloc(mData,sizeof(U8)*size);
|
return mData;
|
||||||
if(data)
|
|
||||||
{
|
|
||||||
mData = data;
|
|
||||||
mDataSize = size;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
llwarns << "Out of memory in LLImageBase::reallocateData" << llendl;
|
|
||||||
|
|
||||||
return data;
|
LLMemType mt1((LLMemType::EMemType)mMemType);
|
||||||
|
U8 *new_datap = new U8[size];
|
||||||
|
if (!new_datap)
|
||||||
|
{
|
||||||
|
llwarns << "Out of memory in LLImageBase::reallocateData" << llendl;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (mData)
|
||||||
|
{
|
||||||
|
S32 bytes = llmin(mDataSize, size);
|
||||||
|
memcpy(new_datap, mData, bytes); /* Flawfinder: ignore */
|
||||||
|
delete[] mData;
|
||||||
|
}
|
||||||
|
mData = new_datap;
|
||||||
|
mDataSize = size;
|
||||||
|
return mData;
|
||||||
}
|
}
|
||||||
|
|
||||||
const U8* LLImageBase::getData() const
|
const U8* LLImageBase::getData() const
|
||||||
|
|||||||
Reference in New Issue
Block a user