> -----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