зеркало из https://github.com/mozilla/gecko-dev.git
fix for #62401 - r=jsg sr=brendan
clean up references to the global runtime before services are shutdown, but acting as an observer on XPCOM shutdown
This commit is contained in:
Родитель
8fb23ce1a8
Коммит
11ba78572a
|
@ -237,6 +237,7 @@ nsPref::nsPref()
|
||||||
++mRefCnt;
|
++mRefCnt;
|
||||||
rv = observerService->AddObserver(this, PROFILE_BEFORE_CHANGE_TOPIC);
|
rv = observerService->AddObserver(this, PROFILE_BEFORE_CHANGE_TOPIC);
|
||||||
rv = observerService->AddObserver(this, PROFILE_DO_CHANGE_TOPIC);
|
rv = observerService->AddObserver(this, PROFILE_DO_CHANGE_TOPIC);
|
||||||
|
rv = observerService->AddObserver(this, NS_ConvertASCIItoUCS2(NS_XPCOM_SHUTDOWN_OBSERVER_ID).get());
|
||||||
--mRefCnt;
|
--mRefCnt;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -630,7 +631,7 @@ NotifyObserver(const char *newpref, void *data)
|
||||||
{
|
{
|
||||||
nsCOMPtr<nsIObserver> observer = NS_STATIC_CAST(nsIObserver *, data);
|
nsCOMPtr<nsIObserver> observer = NS_STATIC_CAST(nsIObserver *, data);
|
||||||
observer->Observe(observer, NS_LITERAL_STRING("nsPref:changed"),
|
observer->Observe(observer, NS_LITERAL_STRING("nsPref:changed"),
|
||||||
NS_ConvertASCIItoUCS2(newpref));
|
NS_ConvertASCIItoUCS2(newpref).get());
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -836,7 +837,7 @@ NS_IMETHODIMP nsPref::SetCharPref(const char *pref,const char* value)
|
||||||
NS_IMETHODIMP nsPref::SetUnicharPref(const char *pref, const PRUnichar *value)
|
NS_IMETHODIMP nsPref::SetUnicharPref(const char *pref, const PRUnichar *value)
|
||||||
{
|
{
|
||||||
if (NS_FAILED(SecurePrefCheck(pref))) return NS_ERROR_FAILURE;
|
if (NS_FAILED(SecurePrefCheck(pref))) return NS_ERROR_FAILURE;
|
||||||
return SetCharPref(pref, NS_ConvertUCS2toUTF8(value));
|
return SetCharPref(pref, NS_ConvertUCS2toUTF8(value).get());
|
||||||
}
|
}
|
||||||
|
|
||||||
NS_IMETHODIMP nsPref::SetIntPref(const char *pref,PRInt32 value)
|
NS_IMETHODIMP nsPref::SetIntPref(const char *pref,PRInt32 value)
|
||||||
|
@ -899,7 +900,7 @@ NS_IMETHODIMP nsPref::SetDefaultUnicharPref(const char *pref,
|
||||||
const PRUnichar *value)
|
const PRUnichar *value)
|
||||||
{
|
{
|
||||||
if (NS_FAILED(SecurePrefCheck(pref))) return NS_ERROR_FAILURE;
|
if (NS_FAILED(SecurePrefCheck(pref))) return NS_ERROR_FAILURE;
|
||||||
return SetDefaultCharPref(pref, NS_ConvertUCS2toUTF8(value));
|
return SetDefaultCharPref(pref, NS_ConvertUCS2toUTF8(value).get());
|
||||||
}
|
}
|
||||||
|
|
||||||
NS_IMETHODIMP nsPref::SetDefaultIntPref(const char *pref,PRInt32 value)
|
NS_IMETHODIMP nsPref::SetDefaultIntPref(const char *pref,PRInt32 value)
|
||||||
|
@ -1487,6 +1488,11 @@ NS_IMETHODIMP nsPref::Observe(nsISupports *aSubject, const PRUnichar *aTopic, co
|
||||||
PREF_ClearAllUserPrefs();
|
PREF_ClearAllUserPrefs();
|
||||||
rv = ReadUserPrefs();
|
rv = ReadUserPrefs();
|
||||||
}
|
}
|
||||||
|
else if (!nsCRT::strcmp(aTopic, NS_XPCOM_SHUTDOWN_OBSERVER_ID)) {
|
||||||
|
// we're shutting down now, so we need to clean up and
|
||||||
|
// eliminate our reference to the JS runtime
|
||||||
|
ShutDown();
|
||||||
|
}
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче