diff options
-rw-r--r-- | indra/llaudio/llaudiodecodemgr.cpp | 16 | ||||
-rw-r--r-- | indra/newview/llvoicechannel.cpp | 14 |
2 files changed, 24 insertions, 6 deletions
diff --git a/indra/llaudio/llaudiodecodemgr.cpp b/indra/llaudio/llaudiodecodemgr.cpp index 77e57b14f5..6ab61689fd 100644 --- a/indra/llaudio/llaudiodecodemgr.cpp +++ b/indra/llaudio/llaudiodecodemgr.cpp @@ -265,9 +265,19 @@ BOOL LLVorbisDecodeState::initDecode() mInFilep = NULL; return FALSE; } - - mWAVBuffer.reserve(size_guess); - mWAVBuffer.resize(WAV_HEADER_SIZE); + + try + { + mWAVBuffer.reserve(size_guess); + mWAVBuffer.resize(WAV_HEADER_SIZE); + } + catch (std::bad_alloc) + { + LL_WARNS("AudioEngine") << "Out of memory when trying to alloc buffer: " << size_guess << LL_ENDL; + delete mInFilep; + mInFilep = NULL; + return FALSE; + } { // write the .wav format header diff --git a/indra/newview/llvoicechannel.cpp b/indra/newview/llvoicechannel.cpp index c58e98b3fb..f971554c9d 100644 --- a/indra/newview/llvoicechannel.cpp +++ b/indra/newview/llvoicechannel.cpp @@ -74,10 +74,18 @@ LLVoiceChannel::LLVoiceChannel(const LLUUID& session_id, const std::string& sess LLVoiceChannel::~LLVoiceChannel() { - // Must check instance exists here, the singleton MAY have already been destroyed. - if(LLVoiceClient::instanceExists()) + if (sSuspendedVoiceChannel == this) { - LLVoiceClient::getInstance()->removeObserver(this); + sSuspendedVoiceChannel = NULL; + } + if (sCurrentVoiceChannel == this) + { + sCurrentVoiceChannel = NULL; + // Must check instance exists here, the singleton MAY have already been destroyed. + if(LLVoiceClient::instanceExists()) + { + LLVoiceClient::getInstance()->removeObserver(this); + } } sVoiceChannelMap.erase(mSessionID); |