Bert Huijben wrote:
>> URL: http://svn.apache.org/r1585921
>> Log:
>> * subversion/include/svn_error.h
>>   (svn_error_root_cause): Document that the returned error should not
>>     be cleared, just like in svn_error_find_cause.
> 
> As all the errors in a chain are in the same pool, clearing the root cause or 
> the complete chain is really the same thing
> 
> But it is probably safer to document it this way... as it is certainly wrong 
> to 
> clear both chains.
> 
> 
> In most cases it is safer to check for an error somewhere in the chain as 
> what 
> is returned as the root cause (the most inner error) is not really the error 
> that caused the error when error chains are composed. Perhaps we should also 
> extend the documentation to explain this bit.

You added a comment about this in the implementation in r1553266:

svn_error_t *
svn_error_root_cause(svn_error_t *err)
{
  while (err)
    {
      /* I don't think we can change the behavior here, but the additional
         error chain doesn't define the root cause. Perhaps we should rev
         this function. */
      if (err->child /*&& err->child->apr_err != SVN_ERR_COMPOSED_ERROR*/)
        err = err->child;
      else
        break;
    }

  return err;
}

I also noticed that you made svn_error_compose_create insert the 
SVN_ERR_COMPOSED_ERROR marker, but not svn_error_compose. I think of those two 
functions as synonymous with slightly different calling conventions, but now 
they differ in this respect, for no apparent reason. Can you comment on that?

- Julian

Reply via email to