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/