зеркало из https://github.com/mozilla/gecko-dev.git
Removing shutdown listener. Releasing gCaseConv on XPCOM Shutdown r=kipp
This commit is contained in:
Родитель
d120ed2e68
Коммит
c2288cca73
|
@ -57,6 +57,10 @@
|
|||
#include "nsLeakDetector.h"
|
||||
#endif
|
||||
|
||||
// Include files that dont reside under xpcom
|
||||
// Our goal was to make this zero. But... :-(
|
||||
#include "nsICaseConversion.h"
|
||||
|
||||
// base
|
||||
static NS_DEFINE_CID(kAllocatorCID, NS_ALLOCATOR_CID);
|
||||
// ds
|
||||
|
@ -153,9 +157,11 @@ RegisterGenericFactory(nsIComponentManager* compMgr, const nsCID& cid, const cha
|
|||
return rv;
|
||||
}
|
||||
|
||||
// Globals in xpcom
|
||||
|
||||
nsIServiceManager* nsServiceManager::mGlobalServiceManager = NULL;
|
||||
nsComponentManagerImpl* nsComponentManagerImpl::gComponentManager = NULL;
|
||||
static nsFileSpec registryDirName;
|
||||
nsICaseConversion *gCaseConv = NULL;
|
||||
|
||||
nsresult NS_COM NS_InitXPCOM(nsIServiceManager* *result,
|
||||
nsFileSpec *registryFile, nsFileSpec *componentDir)
|
||||
|
@ -503,6 +509,9 @@ nsresult NS_COM NS_ShutdownXPCOM(nsIServiceManager* servMgr)
|
|||
NS_RELEASE2(nsServiceManager::mGlobalServiceManager, cnt);
|
||||
NS_ASSERTION(cnt == 0, "Service Manager being held past XPCOM shutdown.");
|
||||
|
||||
// Release the global case converter
|
||||
NS_IF_RELEASE(gCaseConv);
|
||||
|
||||
#if defined(DEBUG_shaver) || defined(DEBUG_dp)
|
||||
/* shaver needs to fix this and turn this on for the world */
|
||||
|
||||
|
|
|
@ -118,52 +118,17 @@ static const unsigned char kLower2Upper[256] = {
|
|||
#define TOUPPER(_ucs2) \
|
||||
(((_ucs2) < 128) ? PRUnichar(kLower2Upper[_ucs2]) : _ToUpper(_ucs2))
|
||||
|
||||
class HandleCaseConversionShutdown : public nsIShutdownListener {
|
||||
public :
|
||||
NS_IMETHOD OnShutdown(const nsCID& cid, nsISupports* service);
|
||||
HandleCaseConversionShutdown(void) { NS_INIT_REFCNT(); }
|
||||
virtual ~HandleCaseConversionShutdown(void) {}
|
||||
NS_DECL_ISUPPORTS
|
||||
};
|
||||
static NS_DEFINE_CID(kUnicharUtilCID, NS_UNICHARUTIL_CID);
|
||||
|
||||
static nsICaseConversion * gCaseConv = NULL;
|
||||
extern nsICaseConversion * gCaseConv;
|
||||
|
||||
NS_IMPL_ISUPPORTS1(HandleCaseConversionShutdown, nsIShutdownListener)
|
||||
|
||||
nsresult
|
||||
HandleCaseConversionShutdown::OnShutdown(const nsCID& cid,
|
||||
nsISupports* aService)
|
||||
{
|
||||
if (cid.Equals(kUnicharUtilCID)) {
|
||||
NS_ASSERTION(aService == gCaseConv, "wrong service!");
|
||||
gCaseConv->Release();
|
||||
gCaseConv = NULL;
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
static HandleCaseConversionShutdown* gListener = NULL;
|
||||
|
||||
static void StartUpCaseConversion()
|
||||
{
|
||||
nsresult err;
|
||||
|
||||
if ( NULL == gListener )
|
||||
{
|
||||
gListener = new HandleCaseConversionShutdown();
|
||||
gListener->AddRef();
|
||||
}
|
||||
err = nsServiceManager::GetService(kUnicharUtilCID, NS_GET_IID(nsICaseConversion),
|
||||
(nsISupports**) &gCaseConv, gListener);
|
||||
}
|
||||
static void CheckCaseConversion()
|
||||
{
|
||||
if(NULL == gCaseConv )
|
||||
StartUpCaseConversion();
|
||||
if (NULL == gCaseConv)
|
||||
(void) nsServiceManager::GetService(kUnicharUtilCID, NS_GET_IID(nsICaseConversion),
|
||||
(nsISupports**) &gCaseConv);
|
||||
|
||||
NS_ASSERTION( gCaseConv != NULL , "cannot obtain UnicharUtil");
|
||||
|
||||
}
|
||||
|
||||
static PRUnichar _ToLower(PRUnichar aChar)
|
||||
|
|
Загрузка…
Ссылка в новой задаче