MAINT-2124 Texture allocation issues
parent
a5cb8fdbee
commit
083b93d2f9
|
|
@ -374,19 +374,28 @@ bool LLImageJ2C::loadAndValidate(const std::string &filename)
|
|||
else
|
||||
{
|
||||
U8 *data = (U8*)ALLOCATE_MEM(LLImageBase::getPrivatePool(), file_size);
|
||||
apr_size_t bytes_read = file_size;
|
||||
apr_status_t s = apr_file_read(apr_file, data, &bytes_read); // modifies bytes_read
|
||||
infile.close() ;
|
||||
|
||||
if (s != APR_SUCCESS || (S32)bytes_read != file_size)
|
||||
if (!data)
|
||||
{
|
||||
FREE_MEM(LLImageBase::getPrivatePool(), data);
|
||||
setLastError("Unable to read entire file");
|
||||
infile.close();
|
||||
setLastError("Out of memory", filename);
|
||||
res = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
res = validate(data, file_size);
|
||||
apr_size_t bytes_read = file_size;
|
||||
apr_status_t s = apr_file_read(apr_file, data, &bytes_read); // modifies bytes_read
|
||||
infile.close();
|
||||
|
||||
if (s != APR_SUCCESS || (S32)bytes_read != file_size)
|
||||
{
|
||||
FREE_MEM(LLImageBase::getPrivatePool(), data);
|
||||
setLastError("Unable to read entire file");
|
||||
res = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
res = validate(data, file_size);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -452,26 +452,37 @@ bool LLTextureCacheRemoteWorker::doRead()
|
|||
size = llmin(size, mDataSize);
|
||||
// Allocate the read buffer
|
||||
mReadData = (U8*)ALLOCATE_MEM(LLImageBase::getPrivatePool(), size);
|
||||
S32 bytes_read = LLAPRFile::readEx(mCache->mHeaderDataFileName,
|
||||
mReadData, offset, size, mCache->getLocalAPRFilePool());
|
||||
if (bytes_read != size)
|
||||
if (mReadData)
|
||||
{
|
||||
LL_WARNS() << "LLTextureCacheWorker: " << mID
|
||||
<< " incorrect number of bytes read from header: " << bytes_read
|
||||
<< " / " << size << LL_ENDL;
|
||||
FREE_MEM(LLImageBase::getPrivatePool(), mReadData);
|
||||
mReadData = NULL;
|
||||
mDataSize = -1; // failed
|
||||
done = true;
|
||||
}
|
||||
// If we already read all we expected, we're actually done
|
||||
if (mDataSize <= bytes_read)
|
||||
{
|
||||
done = true;
|
||||
S32 bytes_read = LLAPRFile::readEx(mCache->mHeaderDataFileName,
|
||||
mReadData, offset, size, mCache->getLocalAPRFilePool());
|
||||
if (bytes_read != size)
|
||||
{
|
||||
LL_WARNS() << "LLTextureCacheWorker: " << mID
|
||||
<< " incorrect number of bytes read from header: " << bytes_read
|
||||
<< " / " << size << LL_ENDL;
|
||||
FREE_MEM(LLImageBase::getPrivatePool(), mReadData);
|
||||
mReadData = NULL;
|
||||
mDataSize = -1; // failed
|
||||
done = true;
|
||||
}
|
||||
// If we already read all we expected, we're actually done
|
||||
if (mDataSize <= bytes_read)
|
||||
{
|
||||
done = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
mState = BODY;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
mState = BODY;
|
||||
LL_WARNS() << "LLTextureCacheWorker: " << mID
|
||||
<< " failed to allocate memory for reading: " << mDataSize << LL_ENDL;
|
||||
mReadData = NULL;
|
||||
mDataSize = -1; // failed
|
||||
done = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1781,7 +1781,17 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
|||
mRequestedSize -= src_offset; // Make requested values reflect useful part
|
||||
mRequestedOffset += src_offset;
|
||||
}
|
||||
|
||||
|
||||
U8 * buffer = (U8 *)ALLOCATE_MEM(LLImageBase::getPrivatePool(), total_size);
|
||||
if (!buffer)
|
||||
{
|
||||
// abort. If we have no space for packet, we have not enough space to decode image
|
||||
setState(DONE);
|
||||
LL_WARNS(LOG_TXT) << mID << " abort: out of memory" << LL_ENDL;
|
||||
releaseHttpSemaphore();
|
||||
return true;
|
||||
}
|
||||
|
||||
if (mFormattedImage.isNull())
|
||||
{
|
||||
// For now, create formatted image based on extension
|
||||
|
|
@ -1801,10 +1811,10 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
|||
{
|
||||
mFileSize = total_size + 1 ; //flag the file is not fully loaded.
|
||||
}
|
||||
|
||||
U8 * buffer = (U8 *) ALLOCATE_MEM(LLImageBase::getPrivatePool(), total_size);
|
||||
|
||||
if (cur_size > 0)
|
||||
{
|
||||
// Copy previously collected data into buffer
|
||||
memcpy(buffer, mFormattedImage->getData(), cur_size);
|
||||
}
|
||||
mHttpBufferArray->read(src_offset, (char *) buffer + cur_size, append_size);
|
||||
|
|
|
|||
Loading…
Reference in New Issue