{  NS_AUTOLOCK(mLock); PL_DHashTableEnumerate(&mForwardArcs, SweepForwardArcsEntries, &info); }
PL_DHashTableEnumerate(&mForwardArcs, SweepForwardArcsEntries, &info);
InMemoryDataSource::Sweep(){    SweepInfo info = { nsnull, &mReverseArcs, &mAllocator};    {        // Remove all the assertions while holding the lock, but don't notify anyone.        NS_AUTOLOCK(mLock);        PL_DHashTableEnumerate(&mForwardArcs, SweepForwardArcsEntries, &info);    }    // Now we've left the autolock. Do the notification.    Assertion* as = info.mUnassertList;    while (as) {#ifdef PR_LOGGING        LogOperation("SWEEP", as->mSource, as->u.as.mProperty, as->u.as.mTarget, as->u.as.mTruthValue);#endif        if (!(as->mHashEntry))        {            for (PRInt32 i = PRInt32(mNumObservers) - 1; mPropagateChanges && i >= 0; --i) {                nsIRDFObserver* obs = mObservers[i];                // XXXbz other loops over mObservers null-check |obs| here!                obs->OnUnassert(this, as->mSource, as->u.as.mProperty, as->u.as.mTarget);                // XXX ignore return value?            }        }        Assertion* doomed = as;        as = as->mNext;        // Unlink, and release the datasource's reference        doomed->mNext = doomed->u.as.mInvNext = nsnull;        doomed->Release(mAllocator);    }    return NS_OK;}