if (mURLSpec) PL_strfree(mURLSpec);
RDFXMLDataSourceImpl::~RDFXMLDataSourceImpl(void){    nsresult rv;    // Unregister first so that nobody else tries to get us.    rv = gRDFService->UnregisterDataSource(this);    // Now flush contents    rv = Flush();    // Release RDF/XML sink observers    for (PRInt32 i = mObservers.Count() - 1; i >= 0; --i) {        nsIRDFXMLSinkObserver* obs = NS_STATIC_CAST(nsIRDFXMLSinkObserver*, mObservers[i]);        NS_RELEASE(obs);    }    if (mURLSpec)        PL_strfree(mURLSpec);    while (mNameSpaces) {        NameSpaceMap* doomed = mNameSpaces;        mNameSpaces = mNameSpaces->Next;        NS_IF_RELEASE(doomed->Prefix);        delete doomed;    }    NS_RELEASE(mInner);    if (--gRefCnt == 0) {        NS_IF_RELEASE(kRDF_Bag);        NS_IF_RELEASE(kRDF_Seq);        NS_IF_RELEASE(kRDF_Alt);        NS_IF_RELEASE(kRDF_instanceOf);        NS_IF_RELEASE(kRDF_nextVal);        if (gRDFC) {            nsServiceManager::ReleaseService(kRDFContainerUtilsCID, gRDFC);            gRDFC = nsnull;        }        if (gRDFService) {            nsServiceManager::ReleaseService(kRDFServiceCID, gRDFService);            gRDFService = nsnull;        }    }}