diff options
| author | Ankur Ahlawat <anchor@lindenlab.com> | 2018-01-17 15:53:56 -0800 |
|---|---|---|
| committer | Ankur Ahlawat <anchor@lindenlab.com> | 2018-01-17 15:53:56 -0800 |
| commit | 5a12a88f7b53bb99a6b302c35d891a8ecee59855 (patch) | |
| tree | dd52f7a9f76ac5d696a517f351371ceb619b7d30 /indra/llcorehttp/bufferarray.cpp | |
| parent | d4ce47b09122d1f76601ba402c2b9ad6bb504950 (diff) | |
| parent | 7acbd8ed8d73c507675d45360df07d232c431a8b (diff) | |
Merged lindenlab/viewer-release into default
Diffstat (limited to 'indra/llcorehttp/bufferarray.cpp')
| -rw-r--r-- | indra/llcorehttp/bufferarray.cpp | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/indra/llcorehttp/bufferarray.cpp b/indra/llcorehttp/bufferarray.cpp index 8eaaeed710..be534b3ce4 100644 --- a/indra/llcorehttp/bufferarray.cpp +++ b/indra/llcorehttp/bufferarray.cpp @@ -25,6 +25,8 @@ */ #include "bufferarray.h" +#include "llexception.h" +#include "llmemory.h" // BufferArray is a list of chunks, each a BufferArray::Block, of contiguous @@ -140,8 +142,22 @@ size_t BufferArray::append(const void * src, size_t len) { mBlocks.reserve(mBlocks.size() + 5); } - Block * block = Block::alloc(BLOCK_ALLOC_SIZE); - memcpy(block->mData, c_src, copy_len); + Block * block; + try + { + block = Block::alloc(BLOCK_ALLOC_SIZE); + } + catch (std::bad_alloc) + { + LLMemory::logMemoryInfo(TRUE); + + //output possible call stacks to log file. + LLError::LLCallStacks::print(); + + LL_WARNS() << "Bad memory allocation in thrown by Block::alloc in read!" << LL_ENDL; + break; + } + memcpy(block->mData, c_src, copy_len); block->mUsed = copy_len; llassert_always(block->mUsed <= block->mAlloced); mBlocks.push_back(block); @@ -149,7 +165,7 @@ size_t BufferArray::append(const void * src, size_t len) c_src += copy_len; len -= copy_len; } - return ret; + return ret - len; } |
