diff options
| -rw-r--r-- | indra/newview/llchannelmanager.cpp | 21 | ||||
| -rw-r--r-- | indra/newview/llchannelmanager.h | 1 | 
2 files changed, 15 insertions, 7 deletions
| diff --git a/indra/newview/llchannelmanager.cpp b/indra/newview/llchannelmanager.cpp index d6240838b6..0b7b9cbbc7 100644 --- a/indra/newview/llchannelmanager.cpp +++ b/indra/newview/llchannelmanager.cpp @@ -58,15 +58,22 @@ LLChannelManager::LLChannelManager()  //--------------------------------------------------------------------------  LLChannelManager::~LLChannelManager()  { -	for(std::vector<ChannelElem>::iterator it = mChannelList.begin(); it !=  mChannelList.end(); ++it) -	{ -		LLScreenChannelBase* channel = it->channel.get(); -		if (!channel) continue; +} -		delete channel; -	} +//-------------------------------------------------------------------------- +void LLChannelManager::cleanupSingleton() +{ +    // Note: LLScreenChannelBase is a LLUICtrl and depends onto other singletions +    // not captured by singleton-dependency, so cleanup it here instead of destructor +    for (std::vector<ChannelElem>::iterator it = mChannelList.begin(); it != mChannelList.end(); ++it) +    { +        LLScreenChannelBase* channel = it->channel.get(); +        if (!channel) continue; -	mChannelList.clear(); +        delete channel; +    } + +    mChannelList.clear();  }  //-------------------------------------------------------------------------- diff --git a/indra/newview/llchannelmanager.h b/indra/newview/llchannelmanager.h index 8b9d0dda8b..8abe350196 100644 --- a/indra/newview/llchannelmanager.h +++ b/indra/newview/llchannelmanager.h @@ -46,6 +46,7 @@ class LLChannelManager : public LLSingleton<LLChannelManager>  	LLSINGLETON(LLChannelManager);  	virtual ~LLChannelManager(); +	void cleanupSingleton();  public: | 
