rv = builder->SetDocument(nsnull); NS_ASSERTION(NS_SUCCEEDED(rv), "error creating content");
rv = builder->SetDocument(nsnull); NS_ASSERTION(NS_SUCCEEDED(rv), "error unlinking builder from document");
XULDocumentImpl::~XULDocumentImpl(){    // mParentDocument is never refcounted    // Delete references to sub-documents    {        PRInt32 i = mSubDocuments.Count();        while (--i >= 0) {            nsIDocument* subdoc = (nsIDocument*) mSubDocuments.ElementAt(i);            NS_RELEASE(subdoc);        }    }    // Delete references to style sheets but only if we aren't a popup document.    if (!mIsPopup) {        PRInt32 i = mStyleSheets.Count();        while (--i >= 0) {            nsIStyleSheet* sheet = (nsIStyleSheet*) mStyleSheets.ElementAt(i);            sheet->SetOwningDocument(nsnull);            NS_RELEASE(sheet);        }    }    // set all builder references to document to nsnull -- out of band notification    // to break ownership cycle    if (mBuilders)    {        PRUint32 cnt = 0;        nsresult rv = mBuilders->Count(&cnt);        NS_ASSERTION(NS_SUCCEEDED(rv), "Count failed");#ifdef	DEBUG        printf("# of builders: %lu\n", (unsigned long)cnt);#endif	    for (PRUint32 i = 0; i < cnt; ++i)	    {		// XXX we should QueryInterface() here		nsIRDFContentModelBuilder* builder		    = (nsIRDFContentModelBuilder*) mBuilders->ElementAt(i);		NS_ASSERTION(builder != nsnull, "null ptr");		if (! builder)		    continue;		rv = builder->SetDocument(nsnull);		NS_ASSERTION(NS_SUCCEEDED(rv), "error creating content");		// XXX ignore error code?		NS_RELEASE(builder);	    }    }    if (mCSSLoader) {      mCSSLoader->DropDocumentReference();    }        if (--gRefCnt == 0) {        NS_IF_RELEASE(kIdAtom);        NS_IF_RELEASE(kObservesAtom);        if (gRDFService) {            nsServiceManager::ReleaseService(kRDFServiceCID, gRDFService);            gRDFService = nsnull;        }        NS_IF_RELEASE(kRDF_instanceOf);        NS_IF_RELEASE(kRDF_type);        NS_IF_RELEASE(kXUL_element);    }}