Oh, I think that's a good idea! I'll go ahead and revert r1169851 now
in the hopes of implementing this in the next day or so.
-Hyrum
On Mon, Sep 12, 2011 at 4:12 PM, Daniel Shahaf <d.s_at_daniel.shahaf.name> wrote:
> 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.s_at_daniel.shahaf.name> wrote:
>> > How is that different from using svn_error_raise_on_malfunction()?
>> >
>> > i.e., from passing --trap-assertion-failures ?
>> >
>> > hwright_at_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/
>
--
uberSVN: Apache Subversion Made Easy
http://www.uberSVN.com/
Received on 2011-09-12 23:27:36 CEST