Fix for bug 502055 (XBL leaks). r=smaug, sr=bz.

This commit is contained in:
Peter Van der Beken 2009-07-02 14:05:32 +02:00
parent dbbc06a937
commit 210b12cddd
2 changed files with 23 additions and 0 deletions

View File

@ -3985,6 +3985,14 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(nsGenericElement)
slots->mChildrenList = nsnull;
}
}
{
nsIDocument *doc;
if (!tmp->GetNodeParent() && (doc = tmp->GetOwnerDoc()) &&
tmp->HasFlag(NODE_MAY_BE_IN_BINDING_MNGR)) {
doc->BindingManager()->ChangeDocumentFor(tmp, doc, nsnull);
}
}
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(nsGenericElement)

View File

@ -401,6 +401,7 @@ DocumentInfoHashtableTraverser(nsIURI* key,
{
nsCycleCollectionTraversalCallback *cb =
static_cast<nsCycleCollectionTraversalCallback*>(userArg);
NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(*cb, "mDocumentTable value");
cb->NoteXPCOMChild(di);
return PL_DHASH_NEXT;
}
@ -412,6 +413,7 @@ LoadingDocHashtableTraverser(nsIURI* key,
{
nsCycleCollectionTraversalCallback *cb =
static_cast<nsCycleCollectionTraversalCallback*>(userArg);
NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(*cb, "mLoadingDocTable value");
cb->NoteXPCOMChild(sl);
return PL_DHASH_NEXT;
}
@ -1610,6 +1612,19 @@ nsBindingManager::DropDocumentReference()
if (mProcessAttachedQueueEvent) {
mProcessAttachedQueueEvent->Revoke();
}
if (mContentListTable.ops)
PL_DHashTableFinish(&(mContentListTable));
mContentListTable.ops = nsnull;
if (mAnonymousNodesTable.ops)
PL_DHashTableFinish(&(mAnonymousNodesTable));
mAnonymousNodesTable.ops = nsnull;
if (mInsertionParentTable.ops)
PL_DHashTableFinish(&(mInsertionParentTable));
mInsertionParentTable.ops = nsnull;
mDocument = nsnull;
}