PL_DHashTableEnumerate(&mForwardArcs, DeleteForwardArcsEntry, &mAllocator); PL_DHashTableFinish(&mForwardArcs);  PL_DHashTableFinish(&mReverseArcs);
if (mForwardArcs.ops) {     PL_DHashTableEnumerate(&mForwardArcs, DeleteForwardArcsEntry, &mAllocator); PL_DHashTableFinish(&mForwardArcs); } if (mReverseArcs.ops) PL_DHashTableFinish(&mReverseArcs);
InMemoryDataSource::~InMemoryDataSource(){#ifdef DEBUG_REFS    --gInstanceCount;    fprintf(stdout, "%d - RDF: InMemoryDataSource\n", gInstanceCount);#endif    // 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_DHashTableEnumerate(&mForwardArcs, DeleteForwardArcsEntry, &mAllocator);    PL_DHashTableFinish(&mForwardArcs);    PL_DHashTableFinish(&mReverseArcs);    PR_LOG(gLog, PR_LOG_ALWAYS,           ("InMemoryDataSource(%p): destroyed.", this));#ifdef MOZ_THREADSAFE_RDF    PR_DestroyLock(mLock);#endif}