From 11ba78572a787efa30e436c0856b5fbeb1d3af75 Mon Sep 17 00:00:00 2001 From: "alecf%netscape.com" Date: Fri, 19 Jan 2001 20:44:19 +0000 Subject: [PATCH] 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 --- modules/libpref/src/nsPref.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/modules/libpref/src/nsPref.cpp b/modules/libpref/src/nsPref.cpp index 48cdeb865fda..9e10f846e2d2 100644 --- a/modules/libpref/src/nsPref.cpp +++ b/modules/libpref/src/nsPref.cpp @@ -237,6 +237,7 @@ nsPref::nsPref() ++mRefCnt; rv = observerService->AddObserver(this, PROFILE_BEFORE_CHANGE_TOPIC); rv = observerService->AddObserver(this, PROFILE_DO_CHANGE_TOPIC); + rv = observerService->AddObserver(this, NS_ConvertASCIItoUCS2(NS_XPCOM_SHUTDOWN_OBSERVER_ID).get()); --mRefCnt; } } @@ -630,7 +631,7 @@ NotifyObserver(const char *newpref, void *data) { nsCOMPtr observer = NS_STATIC_CAST(nsIObserver *, data); observer->Observe(observer, NS_LITERAL_STRING("nsPref:changed"), - NS_ConvertASCIItoUCS2(newpref)); + NS_ConvertASCIItoUCS2(newpref).get()); 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) { 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) @@ -899,7 +900,7 @@ NS_IMETHODIMP nsPref::SetDefaultUnicharPref(const char *pref, const PRUnichar *value) { 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) @@ -1487,6 +1488,11 @@ NS_IMETHODIMP nsPref::Observe(nsISupports *aSubject, const PRUnichar *aTopic, co PREF_ClearAllUserPrefs(); 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; }