PRBool hasAssertion; rv = HasAssertion(aSource, aProperty, aTarget, PR_TRUE, &hasAssertion); if (NS_FAILED(rv)) return rv;
CompositeDataSourceImpl::OnUnassert(nsIRDFResource* aSource,                                    nsIRDFResource* aProperty,                                    nsIRDFNode* aTarget){    // Make sure that the un-assertion doesn't just unmask the    // same assertion in a different datasource.    //    // XXX We could make this more efficient if we knew _which_    // datasource actually served up the OnAssert(): we could use    // HasAssertionN() to only search datasources _before_ the    // datasource that coughed up the assertion.    nsresult rv;    PRBool hasAssertion;    rv = HasAssertion(aSource, aProperty, aTarget, PR_TRUE, &hasAssertion);    if (NS_FAILED(rv)) return rv;    if (hasAssertion)        return NS_OK;    if (mObservers) {        PRUint32 count;        rv = mObservers->Count(&count);        if (NS_FAILED(rv)) return rv;        for (PRInt32 i = PRInt32(count) - 1; i >= 0; --i) {            nsIRDFObserver* obs = (nsIRDFObserver*) mObservers->ElementAt(i);            obs->OnUnassert(aSource, aProperty, aTarget);            NS_RELEASE(obs);            // XXX ignore return value?        }    }    return NS_OK;}