diff options
| author | Richard Nelson <richard@lindenlab.com> | 2011-10-14 16:43:43 -0700 | 
|---|---|---|
| committer | Richard Nelson <richard@lindenlab.com> | 2011-10-14 16:43:43 -0700 | 
| commit | cf98cdf69f481dd473363d4a80a80f27e96f87e8 (patch) | |
| tree | dba0434264cd0ba4b46b3fdad27c7d1a20c8847b /indra/newview | |
| parent | 4413ea12b19eddfceb162491bdbcf19187850f92 (diff) | |
fix for crash on exit
Diffstat (limited to 'indra/newview')
| -rw-r--r-- | indra/newview/llchannelmanager.cpp | 23 | ||||
| -rw-r--r-- | indra/newview/llchannelmanager.h | 6 | ||||
| -rw-r--r-- | indra/newview/llscreenchannel.h | 2 | 
3 files changed, 21 insertions, 10 deletions
| diff --git a/indra/newview/llchannelmanager.cpp b/indra/newview/llchannelmanager.cpp index 59842aeb6c..ca635eaa8f 100644 --- a/indra/newview/llchannelmanager.cpp +++ b/indra/newview/llchannelmanager.cpp @@ -58,7 +58,10 @@ LLChannelManager::~LLChannelManager()  {  	for(std::vector<ChannelElem>::iterator it = mChannelList.begin(); it !=  mChannelList.end(); ++it)  	{ -		delete (*it).channel; +		LLScreenChannelBase* channel = it->channel.get(); +		if (!channel) continue; + +		delete channel;  	}  	mChannelList.clear(); @@ -84,16 +87,19 @@ void LLChannelManager::onLoginCompleted()  	// calc a number of all offline notifications  	for(std::vector<ChannelElem>::iterator it = mChannelList.begin(); it !=  mChannelList.end(); ++it)  	{ +		LLScreenChannelBase* channel = it->channel.get(); +		if (!channel) continue; +  		// don't calc notifications for Nearby Chat -		if((*it).channel->getChannelID() == LLUUID(gSavedSettings.getString("NearByChatChannelUUID"))) +		if(channel->getChannelID() == LLUUID(gSavedSettings.getString("NearByChatChannelUUID")))  		{  			continue;  		}  		// don't calc notifications for channels that always show their notifications -		if(!(*it).channel->getDisplayToastsAlways()) +		if(!channel->getDisplayToastsAlways())  		{ -			away_notifications +=(*it).channel->getNumberOfHiddenToasts(); +			away_notifications +=channel->getNumberOfHiddenToasts();  		}  	} @@ -157,7 +163,7 @@ LLScreenChannelBase*	LLChannelManager::addChannel(LLScreenChannelBase* channel)  	ChannelElem new_elem;  	new_elem.id = channel->getChannelID(); -	new_elem.channel = channel; +	new_elem.channel = channel->getHandle();  	mChannelList.push_back(new_elem);  @@ -189,7 +195,7 @@ LLScreenChannelBase* LLChannelManager::findChannelByID(const LLUUID& id)  	std::vector<ChannelElem>::iterator it = find(mChannelList.begin(), mChannelList.end(), id);   	if(it != mChannelList.end())  	{ -		return (*it).channel; +		return (*it).channel.get();  	}  	return NULL; @@ -211,7 +217,10 @@ void LLChannelManager::muteAllChannels(bool mute)  	for (std::vector<ChannelElem>::iterator it = mChannelList.begin();  			it != mChannelList.end(); it++)  	{ -		it->channel->setShowToasts(!mute); +		if (it->channel.get()) +		{ +			it->channel.get()->setShowToasts(!mute); +		}  	}  } diff --git a/indra/newview/llchannelmanager.h b/indra/newview/llchannelmanager.h index 671e545465..a5de8a5327 100644 --- a/indra/newview/llchannelmanager.h +++ b/indra/newview/llchannelmanager.h @@ -48,10 +48,10 @@ public:  	struct ChannelElem  	{ -		LLUUID				id; -		LLScreenChannelBase*	channel; +		LLUUID							id; +		LLHandle<LLScreenChannelBase>	channel; -		ChannelElem() : id(LLUUID("")), channel(NULL) { } +		ChannelElem() { }  		ChannelElem(const ChannelElem &elem)  		{ diff --git a/indra/newview/llscreenchannel.h b/indra/newview/llscreenchannel.h index 4d8e3e9e93..f4f52eea19 100644 --- a/indra/newview/llscreenchannel.h +++ b/indra/newview/llscreenchannel.h @@ -113,6 +113,7 @@ public:  	// get ID of a channel  	LLUUID	getChannelID() { return mID; } +	LLHandle<LLScreenChannelBase> getHandle() { mRootHandle.bind(this); return mRootHandle; }  protected:  	void	updateBottom(); @@ -124,6 +125,7 @@ protected:  	bool		mDisplayToastsAlways;  	// controls whether a channel shows toasts or not  	bool		mShowToasts; +	LLRootHandle<LLScreenChannelBase> mRootHandle;  	//   	EToastAlignment		mToastAlignment;  	EChannelAlignment	mChannelAlignment; | 
