if (gRDFService) { nsServiceManager::ReleaseService(kRDFServiceCID, gRDFService); gRDFService = nsnull; }  NS_IF_RELEASE(kRDF_instanceOf); NS_IF_RELEASE(kRDF_type); NS_IF_RELEASE(kXUL_element);
XULDocumentImpl::~XULDocumentImpl(){    NS_IF_RELEASE(mDocumentDataSource);    NS_IF_RELEASE(mLocalDataSource);    if (mRDFService) {        nsServiceManager::ReleaseService(kRDFServiceCID, mRDFService);        mRDFService = nsnull;    }    // mParentDocument is never refcounted    // Delete references to sub-documents    PRInt32 index = mSubDocuments.Count();    while (--index >= 0) {      nsIDocument* subdoc = (nsIDocument*) mSubDocuments.ElementAt(index);      NS_RELEASE(subdoc);    }    // set all builder references to document to nsnull    if (mBuilders)    {#ifdef	DEBUG	printf("# of builders: %lu\n", (unsigned long)mBuilders->Count());#endif	    for (PRUint32 i = 0; i < mBuilders->Count(); ++i)	    {		// XXX we should QueryInterface() here		nsIRDFContentModelBuilder* builder		    = (nsIRDFContentModelBuilder*) mBuilders->ElementAt(i);		NS_ASSERTION(builder != nsnull, "null ptr");		if (! builder)		    continue;		nsresult rv = builder->SetDocument(nsnull);		NS_ASSERTION(NS_SUCCEEDED(rv), "error creating content");		// XXX ignore error code?		NS_RELEASE(builder);	    }    }    NS_IF_RELEASE(mBuilders);    NS_IF_RELEASE(mXULBuilder);    NS_IF_RELEASE(mSelection);    NS_IF_RELEASE(mScriptContextOwner);    NS_IF_RELEASE(mAttrStyleSheet);    NS_IF_RELEASE(mRootContent);    NS_IF_RELEASE(mDocumentURLGroup);    NS_IF_RELEASE(mDocumentURL);    NS_IF_RELEASE(mArena);    NS_IF_RELEASE(mNameSpaceManager);    NS_IF_RELEASE(mLineBreaker);    NS_IF_RELEASE(mWordBreaker);    NS_IF_RELEASE(mContentViewerContainer);    NS_IF_RELEASE(mFragmentRoot);        if (--gRefCnt == 0) {        NS_IF_RELEASE(kIdAtom);        NS_IF_RELEASE(kObservesAtom);    }}