NS_ASSERTION(obs != nsnull, "observer array corrupted!"); if (! obs) continue;
InMemoryDataSource::Unassert(nsIRDFResource* aSource,                             nsIRDFResource* aProperty,                             nsIRDFNode* aTarget){    NS_PRECONDITION(aSource != nsnull, "null ptr");    if (! aSource)        return NS_ERROR_NULL_POINTER;    NS_PRECONDITION(aProperty != nsnull, "null ptr");    if (! aProperty)        return NS_ERROR_NULL_POINTER;    NS_PRECONDITION(aTarget != nsnull, "null ptr");    if (! aTarget)        return NS_ERROR_NULL_POINTER;    nsresult rv;    {        NS_AUTOLOCK(mLock);        rv = LockedUnassert(aSource, aProperty, aTarget);        if (NS_FAILED(rv)) return rv;    }    // Notify the world    for (PRInt32 i = PRInt32(mNumObservers) - 1; i >= 0; --i) {        nsIRDFObserver* obs = (nsIRDFObserver*) mObservers->ElementAt(i);        obs->OnUnassert(this, aSource, aProperty, aTarget);        NS_RELEASE(obs);        // XXX ignore return value?    }    return NS_RDF_ASSERTION_ACCEPTED;}