Bug 522353 - nsCategoryCache is still observing category changes after xpcom-shutdown, r=biesi, moa=bsmedberg

This commit is contained in:
Marco Bonardo
2009-11-19 14:15:05 +01:00
parent e3e1cc1ee4
commit 07ccd8077d
2 changed files with 15 additions and 9 deletions

View File

@@ -106,17 +106,19 @@ NS_IMPL_ISUPPORTS1(nsCategoryObserver, nsIObserver)
void
nsCategoryObserver::ListenerDied() {
mListener = nsnull;
RemoveObservers();
}
nsCOMPtr<nsIObserverService> serv =
NS_HIDDEN_(void)
nsCategoryObserver::RemoveObservers() {
nsCOMPtr<nsIObserverService> obsSvc =
do_GetService(NS_OBSERVERSERVICE_CONTRACTID);
if (!serv)
return;
serv->RemoveObserver(this, NS_XPCOM_SHUTDOWN_OBSERVER_ID);
serv->RemoveObserver(this, NS_XPCOM_CATEGORY_ENTRY_ADDED_OBSERVER_ID);
serv->RemoveObserver(this, NS_XPCOM_CATEGORY_ENTRY_REMOVED_OBSERVER_ID);
serv->RemoveObserver(this, NS_XPCOM_CATEGORY_CLEARED_OBSERVER_ID);
if (obsSvc) {
obsSvc->RemoveObserver(this, NS_XPCOM_SHUTDOWN_OBSERVER_ID);
obsSvc->RemoveObserver(this, NS_XPCOM_CATEGORY_ENTRY_ADDED_OBSERVER_ID);
obsSvc->RemoveObserver(this, NS_XPCOM_CATEGORY_ENTRY_REMOVED_OBSERVER_ID);
obsSvc->RemoveObserver(this, NS_XPCOM_CATEGORY_CLEARED_OBSERVER_ID);
}
}
NS_IMETHODIMP
@@ -128,6 +130,8 @@ nsCategoryObserver::Observe(nsISupports* aSubject, const char* aTopic,
if (strcmp(aTopic, NS_XPCOM_SHUTDOWN_OBSERVER_ID) == 0) {
mHash.Clear();
mListener->CategoryCleared();
RemoveObservers();
return NS_OK;
}