Fix for bug 368773 (Add a bunch of DOM objects to cycle collection). r=sicking, sr=jst.

git-svn-id: svn://10.0.0.236/trunk@221534 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
peterv%propagandism.org
2007-03-08 11:17:16 +00:00
parent 97392b0e73
commit 4fff00b28c
64 changed files with 1114 additions and 294 deletions

View File

@@ -70,7 +70,42 @@ nsCommandManager::~nsCommandManager()
}
NS_IMPL_ISUPPORTS3(nsCommandManager, nsICommandManager, nsPICommandUpdater, nsISupportsWeakReference)
PR_STATIC_CALLBACK(PRBool)
TraverseCommandObservers(nsHashKey *aKey, void *aData, void* aClosure)
{
nsISupportsArray *observers = NS_STATIC_CAST(nsISupportsArray*, aData);
nsCycleCollectionTraversalCallback *cb =
NS_STATIC_CAST(nsCycleCollectionTraversalCallback*, aClosure);
PRUint32 i, numItems;
nsresult rv = observers->Count(&numItems);
NS_ENSURE_SUCCESS(rv, kHashEnumerateStop);
for (i = 0; i < numItems; ++i) {
cb->NoteXPCOMChild(observers->ElementAt(i));
}
return kHashEnumerateNext;
}
NS_IMPL_CYCLE_COLLECTION_CLASS(nsCommandManager)
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(nsCommandManager)
tmp->mCommandObserversTable.Reset();
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(nsCommandManager)
tmp->mCommandObserversTable.Enumerate(TraverseCommandObservers, &cb);
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
NS_IMPL_CYCLE_COLLECTING_ADDREF_AMBIGUOUS(nsCommandManager, nsICommandManager)
NS_IMPL_CYCLE_COLLECTING_RELEASE_AMBIGUOUS(nsCommandManager, nsICommandManager)
NS_INTERFACE_MAP_BEGIN(nsCommandManager)
NS_INTERFACE_MAP_ENTRY(nsICommandManager)
NS_INTERFACE_MAP_ENTRY(nsPICommandUpdater)
NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference)
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsICommandManager)
NS_INTERFACE_MAP_ENTRIES_CYCLE_COLLECTION(nsCommandManager)
NS_INTERFACE_MAP_END
#if 0
#pragma mark -