> -----Original Message-----
> From: Arwin Arni [mailto:ar...@collab.net]
> Sent: donderdag 19 mei 2011 15:48
> To: Subversion Development
> Subject: SVN_ERR_ASSERT calls abort() in non-maintainer-mode
> 
> In our implementation of SVN_ERR_ASSERT, we do:
> 
> #define SVN_ERR_ASSERT(expr)                                            \
>    do {                                                                  \
>      if (!(expr))                                                        \
>        SVN_ERR(svn_error__malfunction(TRUE, __FILE__, __LINE__, #expr)); \
>    } while (0)
> 
> This ends up calling svn_error_abort_on_malfunction (inside
> subversion/libsvn_subr/error.c) which calls abort() indiscriminately:
> 
> svn_error_t *
> svn_error_abort_on_malfunction(svn_boolean_t can_return,
>                                 const char *file, int line,
>                                 const char *expr)
> {
>    svn_error_t *err = svn_error_raise_on_malfunction(TRUE, file, line,
> expr);
> 
>    svn_handle_error2(err, stderr, FALSE, "svn: ");
>    abort();
>    return err;  /* Not reached. */
> }
> 
> 
> Wouldn't this abort() regardless of maintainer-mode?
> Shouldn't there be some difference between maintainer-mode and
> production?
> 
> Am I missing something here?

The documentation says that you are not allowed to return from the function
when it has that FALSE ca_return, you can *never* return.

(You are free to do a long jump or throw a C++ exception or whatever you
want to do, but you can't return).

And we can't call the function a second time, to say that you didn't follow
that rule.

        Bert

Reply via email to