From ce554304fbc21e8a52b236a56eea70287f002fdd Mon Sep 17 00:00:00 2001 From: Xiaohong Bao Date: Wed, 18 May 2011 11:46:55 -0600 Subject: fix for SH-1591: crash at LLVOCacheEntry::~LLVOCacheEntry() line 138 --- indra/llmessage/lldatapacker.h | 5 +++++ indra/newview/llvocache.cpp | 6 ++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/indra/llmessage/lldatapacker.h b/indra/llmessage/lldatapacker.h index dd9c4eaa38..b0a638c16e 100644 --- a/indra/llmessage/lldatapacker.h +++ b/indra/llmessage/lldatapacker.h @@ -168,10 +168,15 @@ public: S32 getCurrentSize() const { return (S32)(mCurBufferp - mBufferp); } S32 getBufferSize() const { return mBufferSize; } + const U8* getBuffer() const { return mBufferp; } void reset() { mCurBufferp = mBufferp; mWriteEnabled = (mCurBufferp != NULL); } void freeBuffer() { delete [] mBufferp; mBufferp = mCurBufferp = NULL; mBufferSize = 0; mWriteEnabled = FALSE; } void assignBuffer(U8 *bufferp, S32 size) { + if(mBufferp && mBufferp != bufferp) + { + freeBuffer() ; + } mBufferp = bufferp; mCurBufferp = bufferp; mBufferSize = size; diff --git a/indra/newview/llvocache.cpp b/indra/newview/llvocache.cpp index b888a263d0..c605ddb1c8 100644 --- a/indra/newview/llvocache.cpp +++ b/indra/newview/llvocache.cpp @@ -76,6 +76,7 @@ LLVOCacheEntry::LLVOCacheEntry(LLAPRFile* apr_file) S32 size = -1; BOOL success; + mDP.assignBuffer(mBuffer, 0); success = check_read(apr_file, &mLocalID, sizeof(U32)); if(success) { @@ -136,10 +137,11 @@ LLVOCacheEntry::LLVOCacheEntry(LLAPRFile* apr_file) LLVOCacheEntry::~LLVOCacheEntry() { - if(mBuffer) + if(mBuffer != mDP.getBuffer()) { - delete[] mBuffer; + delete[] mBuffer ; //just in case } + mDP.freeBuffer(); } -- cgit v1.2.3