if (mObservers) { for (PRInt32 i = mObservers->Count() - 1; i >= 0; --i) { nsIRDFObserver* obs = (nsIRDFObserver*) mObservers->ElementAt(i); NS_RELEASE(obs); } delete mObservers; }
delete mObservers;
InMemoryDataSource::~InMemoryDataSource(void){    if (mForwardArcs) {        // This'll release all of the Assertion objects that are        // associated with this data source. We only need to do this        // for the forward arcs, because the reverse arcs table        // indexes the exact same set of resources.        PL_HashTableEnumerateEntries(mForwardArcs, DeleteForwardArcsEntry, nsnull);        PL_HashTableDestroy(mForwardArcs);        mForwardArcs = nsnull;    }    if (mReverseArcs) {        PL_HashTableDestroy(mReverseArcs);        mReverseArcs = nsnull;    }    if (mObservers) {        for (PRInt32 i = mObservers->Count() - 1; i >= 0; --i) {            nsIRDFObserver* obs = (nsIRDFObserver*) mObservers->ElementAt(i);            NS_RELEASE(obs);        }        delete mObservers;    }    PR_LOG(gLog, PR_LOG_ALWAYS,           ("InMemoryDataSource(%s): destroyed.", mURL));    if (mURL) PL_strfree(mURL);    PR_DestroyLock(mLock);}