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); | 
