clean up references to the global runtime before
services are shutdown, but acting as an observer on XPCOM shutdown
This commit is contained in:
alecf%netscape.com 2001-01-19 20:44:19 +00:00
Родитель 8fb23ce1a8
Коммит 11ba78572a
1 изменённых файлов: 9 добавлений и 3 удалений

Просмотреть файл

@ -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;
} }