Bug 735550 - unmark gray objects held by live nsXBLDocGlobalObjects. r=smaug

This commit is contained in:
Andrew McCreight 2012-03-18 07:17:05 -07:00
Родитель 296dd12f86
Коммит 071b58d7ff
1 изменённых файлов: 14 добавлений и 0 удалений

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

@ -97,6 +97,8 @@ public:
void ClearGlobalObjectOwner(); void ClearGlobalObjectOwner();
void UnmarkScriptContext();
protected: protected:
virtual ~nsXBLDocGlobalObject(); virtual ~nsXBLDocGlobalObject();
@ -360,6 +362,14 @@ nsXBLDocGlobalObject::ClearGlobalObjectOwner()
mGlobalObjectOwner = nsnull; mGlobalObjectOwner = nsnull;
} }
void
nsXBLDocGlobalObject::UnmarkScriptContext()
{
if (mScriptContext) {
xpc_UnmarkGrayObject(mScriptContext->GetNativeGlobal());
}
}
JSObject * JSObject *
nsXBLDocGlobalObject::GetGlobalJSObject() nsXBLDocGlobalObject::GetGlobalJSObject()
{ {
@ -509,9 +519,13 @@ nsXBLDocumentInfo::MarkInCCGeneration(PRUint32 aGeneration)
if (mDocument) { if (mDocument) {
mDocument->MarkUncollectableForCCGeneration(aGeneration); mDocument->MarkUncollectableForCCGeneration(aGeneration);
} }
// Unmark any JS we hold
if (mBindingTable) { if (mBindingTable) {
mBindingTable->Enumerate(UnmarkProtos, nsnull); mBindingTable->Enumerate(UnmarkProtos, nsnull);
} }
if (mGlobalObject) {
mGlobalObject->UnmarkScriptContext();
}
} }
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsXBLDocumentInfo) NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsXBLDocumentInfo)