How about having the tests use svn_error_raise_on_malfunction() by default and svn_error_abort_on_malfunction() if --allow-segfaults is passed?
We can then drop the --trap-assertion-failures option. Hyrum K Wright wrote on Mon, Sep 12, 2011 at 15:46:45 -0500: > It is no different than passing --trap-assertion-failures. I didn't > even know that option existed prior to your mail. > > However, --trap-assertion-failures has the unfortunate property that > it isn't enabled by default in a standard 'make check' run, so the > tests still abort() rather than continue. > > I'll revert this change as unneeded if folks so desire. > > -Hyrum > > On Mon, Sep 12, 2011 at 2:10 PM, Daniel Shahaf <d...@daniel.shahaf.name> > wrote: > > How is that different from using svn_error_raise_on_malfunction()? > > > > i.e., from passing --trap-assertion-failures ? > > > > hwri...@apache.org wrote on Mon, Sep 12, 2011 at 18:03:42 -0000: > >> Author: hwright > >> Date: Mon Sep 12 18:03:41 2011 > >> New Revision: 1169851 > >> > >> URL: http://svn.apache.org/viewvc?rev=1169851&view=rev > >> Log: > >> Don't let an early abort in the C tests prevent the run of subsequent tests > >> in the same test suite. > >> > >> * subversion/tests/svn_test_main.c > >> (abort_handler): New. > >> (do_test_num): Set and return the above abort handler. > >> > >> Modified: > >> subversion/trunk/subversion/tests/svn_test_main.c > >> > >> Modified: subversion/trunk/subversion/tests/svn_test_main.c > >> URL: > >> http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/svn_test_main.c?rev=1169851&r1=1169850&r2=1169851&view=diff > >> ============================================================================== > >> --- subversion/trunk/subversion/tests/svn_test_main.c (original) > >> +++ subversion/trunk/subversion/tests/svn_test_main.c Mon Sep 12 18:03:41 > >> 2011 > >> @@ -206,6 +206,22 @@ crash_handler(int signum) > >> longjmp(jump_buffer, 1); > >> } > >> > >> +static svn_error_t * > >> +abort_handler(svn_boolean_t can_return, > >> + const char *file, > >> + int line, > >> + const char *expr) > >> +{ > >> + if (!can_return) > >> + { > >> + printf("unrecoverable abort() in %s:%d: '%s'\n", file, line, expr); > >> + exit(1); > >> + } > >> + > >> + return svn_error_createf(SVN_ERR_ASSERTION_FAIL, NULL, > >> + _("In file '%s' line %d: assertion failed > >> (%s)"), > >> + file, line, expr); > >> +} > >> > >> /* Execute a test number TEST_NUM. Pretty-print test name and dots > >> according to our test-suite spec, and return the result code. > >> @@ -226,6 +242,7 @@ do_test_num(const char *progname, > >> const struct svn_test_descriptor_t *desc; > >> const int array_size = get_array_size(); > >> svn_boolean_t run_this_test; /* This test's mode matches DESC->MODE. */ > >> + svn_error_malfunction_handler_t old_handler; > >> > >> /* Check our array bounds! */ > >> if (test_num < 0) > >> @@ -258,6 +275,8 @@ do_test_num(const char *progname, > >> apr_signal(SIGSEGV, crash_handler); > >> } > >> > >> + old_handler = svn_error_set_malfunction_handler(abort_handler); > >> + > >> /* We use setjmp/longjmp to recover from the crash. setjmp() > >> essentially > >> establishes a rollback point, and longjmp() goes back to that point. > >> When we invoke longjmp(), it instructs setjmp() to return non-zero, > >> @@ -286,6 +305,8 @@ do_test_num(const char *progname, > >> "Test crashed " > >> "(run in debugger with '--allow-segfaults')"); > >> > >> + svn_error_set_malfunction_handler(old_handler); > >> + > >> if (!allow_segfaults) > >> { > >> /* Now back to your regularly scheduled program... */ > >> > >> > > > > > > -- > > uberSVN: Apache Subversion Made Easy > http://www.uberSVN.com/