diff options
| author | Nat Goodspeed <nat@lindenlab.com> | 2015-05-27 14:38:51 -0400 | 
|---|---|---|
| committer | Nat Goodspeed <nat@lindenlab.com> | 2015-05-27 14:38:51 -0400 | 
| commit | 3fc39776dd7a347870a5005808c69f27413de424 (patch) | |
| tree | 66abaca8dffc18de0cd3ac13a57c410e54ddd294 /indra/newview | |
| parent | df55db4aa02ef02169d318b1d8b607c2edb3ba5d (diff) | |
MAINT-5232: Remove dubious polling in LLMuteList::getInstance().
The LLMuteList singleton instance might be requested before gMessageSystem is
constructed. LLMuteList wants to register a couple gMessageSystem callbacks.
Since gMessageSystem is not (yet) itself an LLSingleton, LLMuteList's
constructor can't just call it into existence. Until now, LLMuteList overrode
LLSingleton's getInstance() method: every time getInstance() was called, the
subclass override method would check whether gMessageSystem had been
initialized, and if so, register its callbacks before forwarding the call to
the base-class LLSingleton::getInstance() method.
Change to use LLPounceable::callWhenReady() instead.
This is the reason gMessageSystem was made an LLPounceable.
Diffstat (limited to 'indra/newview')
| -rwxr-xr-x | indra/newview/llmutelist.cpp | 29 | ||||
| -rwxr-xr-x | indra/newview/llmutelist.h | 5 | 
2 files changed, 13 insertions, 21 deletions
| diff --git a/indra/newview/llmutelist.cpp b/indra/newview/llmutelist.cpp index 681203ef4f..88bfefa8b8 100755 --- a/indra/newview/llmutelist.cpp +++ b/indra/newview/llmutelist.cpp @@ -47,6 +47,7 @@  #include "pipeline.h"  #include <boost/tokenizer.hpp> +#include <boost/bind.hpp>  #include "lldispatcher.h"  #include "llxfermanager.h" @@ -146,22 +147,6 @@ std::string LLMute::getDisplayType() const  	}  } - -/* static */ -LLMuteList* LLMuteList::getInstance() -{ -	// Register callbacks at the first time that we find that the message system has been created. -	static BOOL registered = FALSE; -	if( !registered && gMessageSystem) -	{ -		registered = TRUE; -		// Register our various callbacks -		gMessageSystem->setHandlerFuncFast(_PREHASH_MuteListUpdate, processMuteListUpdate); -		gMessageSystem->setHandlerFuncFast(_PREHASH_UseCachedMuteList, processUseCachedMuteList); -	} -	return LLSingleton<LLMuteList>::getInstance(); // Call the "base" implementation. -} -  //-----------------------------------------------------------------------------  // LLMuteList()  //----------------------------------------------------------------------------- @@ -169,6 +154,18 @@ LLMuteList::LLMuteList() :  	mIsLoaded(FALSE)  {  	gGenericDispatcher.addHandler("emptymutelist", &sDispatchEmptyMuteList); + +	// Register our callbacks. We may be constructed before gMessageSystem, so +	// use callWhenReady() to register them as soon as gMessageSystem becomes +	// available. +	// When using bind(), must be explicit about default arguments such as +	// that last NULL. +	gMessageSystem.callWhenReady(boost::bind(&LLMessageSystem::setHandlerFuncFast, _1, +											 _PREHASH_MuteListUpdate, processMuteListUpdate, +											 static_cast<void**>(NULL))); +	gMessageSystem.callWhenReady(boost::bind(&LLMessageSystem::setHandlerFuncFast, _1, +											 _PREHASH_UseCachedMuteList, processUseCachedMuteList, +											 static_cast<void**>(NULL)));  }  //----------------------------------------------------------------------------- diff --git a/indra/newview/llmutelist.h b/indra/newview/llmutelist.h index 3e998b4f0e..d315f225bf 100755 --- a/indra/newview/llmutelist.h +++ b/indra/newview/llmutelist.h @@ -84,11 +84,6 @@ public:  	LLMuteList();  	~LLMuteList(); -	// Implemented locally so that we can perform some delayed initialization.  -	// Callers should be careful to call this one and not LLSingleton<LLMuteList>::getInstance() -	// which would circumvent that mechanism. -MG -	static LLMuteList* getInstance(); -  	void addObserver(LLMuteListObserver* observer);  	void removeObserver(LLMuteListObserver* observer); | 
