as->mNext = as->mInvNext = nsnull;
as->mNext = as->u.as.mInvNext = nsnull;
InMemoryDataSource::LockedUnassert(nsIRDFResource* aSource,                                   nsIRDFResource* aProperty,                                   nsIRDFNode* aTarget){#ifdef PR_LOGGING    LogOperation("UNASSERT", aSource, aProperty, aTarget);#endif    Assertion* next = GetForwardArcs(aSource);    Assertion* prev = next;    Assertion* as = nsnull;    while (next) {        if (aProperty == next->mProperty) {            if (aTarget == next->mTarget) {                if (prev == next) {                    SetForwardArcs(aSource, next->mNext);                } else {                    prev->mNext = next->mNext;                }                as = next;                break;            }        }        prev = next;        next = next->mNext;    }    // We don't even have the assertion, so just bail.    if (!as)        return NS_OK;#ifdef DEBUG    PRBool foundReverseArc = PR_FALSE;#endif    next = prev = GetReverseArcs(aTarget);    while (next) {        if (next == as) {            if (prev == next) {                SetReverseArcs(aTarget, next->mInvNext);            } else {                prev->mInvNext = next->mInvNext;            }#ifdef DEBUG            foundReverseArc = PR_TRUE;#endif            break;        }        prev = next;        next = next->mInvNext;    }#ifdef DEBUG    NS_ASSERTION(foundReverseArc, "in-memory db corrupted: unable to find reverse arc");#endif    // Unlink, and release the datasource's reference    as->mNext = as->mInvNext = nsnull;    as->Release(mAllocator);    return NS_OK;}