Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Multiple thread tests segfault on any perl older than 5.14 (5.8.x, 5.10.x and 5.12.x) #261

Closed
ribasushi opened this issue Mar 13, 2012 · 4 comments

Comments

@ribasushi
Copy link

Both the version currently on CPAN and current master only pass tests on 5.14. Anything less - I get the following:

rabbit@Thesaurus:~/devel/test-more$ perl Makefile.PL && make test
Writing Makefile for Test::Simple
PERL_DL_NONLAZY=1 /home/rabbit/perl5/perlbrew/perls/5.12.3/bin/perl5.12.3 "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t t/*/*.t t/*/*/*.t
t/00compile.t .............................. ok    
t/00test_harness_check.t ................... ok   
t/bad_plan.t ............................... ok   
t/BEGIN_require_ok.t ....................... ok   
t/BEGIN_use_ok.t ........................... ok   
t/buffer.t ................................. ok    
t/Builder/bail_out.t ....................... ok   
t/Builder/Builder.t ........................ ok   
t/Builder/carp.t ........................... ok   
t/Builder/context.t ........................ ok   
t/Builder/create.t ......................... ok   
t/Builder/current_test/no_tests.t .......... ok   
t/Builder/current_test/test_number.t ....... ok   
t/Builder/current_test/without_plan.t ...... ok   
t/Builder/details.t ........................ ok   
t/Builder/done_testing.t ................... ok   
t/Builder/done_testing_double.t ............ ok   
t/Builder/done_testing_null_plan.t ......... ok   
t/Builder/done_testing_plan_mismatch.t ..... ok   
t/Builder/done_testing_with_no_plan.t ...... ok   
t/Builder/done_testing_with_number.t ....... ok   
t/Builder/done_testing_with_plan.t ......... ok   
t/Builder/expected_tests.t ................. ok   
t/Builder/fail.t ........................... ok   
t/Builder/fork_with_new_stdout.t ........... ok   
t/Builder/has_plan.t ....................... ok   
t/Builder/has_plan2.t ...................... ok   
t/Builder/in_subtest.t ..................... ok   
t/Builder/is_fh.t .......................... ok    
t/Builder/is_passing.t ..................... ok    
t/Builder/last_test_skipped.t .............. ok   
t/Builder/maybe_regex.t .................... ok    
t/Builder/no_diag.t ........................ ok   
t/Builder/no_ending.t ...................... ok   
t/Builder/no_formatter.t ................... ok   
t/Builder/no_header.t ...................... ok   
t/Builder/no_plan.t ........................ ok   
t/Builder/no_plan_at_all.t ................. ok   
t/Builder/ok_obj.t ......................... ok   
t/Builder/output.t ......................... ok   
t/Builder/reset.t .......................... ok    
t/Builder/reset_outputs.t .................. ok   
t/Builder/skip_all.t ....................... ok   
t/Builder/test_start.t ..................... ok   
t/Builder/use_numbers.t .................... ok   
t/Builder2/assert.t ........................ ok   
t/Builder2/assert_dies.t ................... ok   
t/Builder2/AssertRecord.t .................. ok    
t/Builder2/AssertStack.t ................... ok    
t/Builder2/context.t ....................... ok   
t/Builder2/Counter.t ....................... ok    
t/Builder2/done_testing.t .................. ok   
t/Builder2/HasDefault.t .................... ok   
t/Builder2/is.t ............................ ok   
t/Builder2/Mouse.t ......................... ok   
t/Builder2/Mouse_before_TB2.t .............. skipped: Mouse not installed
t/Builder2/NoWarnings.t .................... ok   
t/Builder2/ok_starts_a_stream.t ............ ok   
t/Builder2/SimpleBuilder2.t ................ ok    
t/Builder2/Stack.t ......................... ok    
t/Builder2/StackBuilder.t .................. ok    
t/Builder2/subtest.t ....................... ok   
t/Builder2/TB2_before_Mouse.t .............. skipped: Mouse not installed
t/Builder2/top.t ........................... ok   
t/c_flag.t ................................. ok   
t/CanDupFilehandles.t ...................... ok    
t/CanLoad.t ................................ ok   
t/CanThread.t .............................. ok   
t/CanTry.t ................................. ok    
t/circular_data.t .......................... ok    
t/cmp_ok.t ................................. ok    
t/dependents.t ............................. skipped: Dependents only tested when releasing
t/diag.t ................................... All 7 subtests passed 
t/died.t ................................... ok   
t/dont_overwrite_die_handler.t ............. ok   
t/eq_set.t ................................. ok   
t/Event/Abort.t ............................ ok   
t/Event/Comment.t .......................... ok   
t/Event/Event.t ............................ ok   
t/Event/EventCoordinator.t ................. ok    
t/Event/EventHandler.t ..................... ok   
t/Event/Events.t ........................... ok    
t/Event/Log.t .............................. ok    
t/Event/post_order.t ....................... ok   
t/Event/SetPlan.t .......................... ok    
t/Event/subtest_handler.t .................. ok   
t/Event/SubtestEnd.t ....................... ok    
t/Event/SubtestStart.t ..................... ok    
t/Event/TestEnd.t .......................... ok   
t/Event/TestMetadata.t ..................... ok   
t/Event/TestStart.t ........................ ok   
t/Event/TestState.t ........................ ok    
t/exit.t ................................... ok     
t/explain.t ................................ ok   
t/extra.t .................................. ok   
t/extra_one.t .............................. ok   
t/fail-like.t .............................. ok   
t/fail-more.t .............................. ok    
t/fail_one.t ............................... ok   
t/filehandles.t ............................ 1/? # this diagnostic should be seen
t/filehandles.t ............................ ok   
t/fork.t ................................... ok   
t/Formatter/Formatter.t .................... ok   
t/Formatter/Multi.t ........................ ok    
t/Formatter/Null.t ......................... ok   
t/Formatter/PlusMinus.t .................... ok   
t/Formatter/POSIX.t ........................ ok   
t/Formatter/POSIX_plus_Builder.t ........... ok   
t/Formatter/reset_streamer.t ............... ok   
t/Formatter/subtest.t ...................... ok   
t/Formatter/TAP/abort.t .................... ok   
t/Formatter/TAP/basic.t .................... ok    
t/Formatter/TAP/ending_commentary.t ........ ok    
t/Formatter/TAP/escapes.t .................. ok   
t/Formatter/TAP/indent.t ................... ok   
t/Formatter/TAP/log.t ...................... ok    
t/Formatter/TAP/subtest.t .................. ok   
t/Formatter/TAP/TB1.t ...................... ok   
t/Formatter/TAP/v12.t ...................... ok   
t/harness_active.t ......................... ok   
t/HasObjectID.t ............................ ok   
t/History/child_process.t .................. ok    
t/History/History.t ........................ ok    
t/History/HistoryStats.t ................... ok    
t/History/in_test.t ........................ ok    
t/History/plan.t ........................... ok   
t/History/test_was_successful.t ............ ok    
t/import.t ................................. ok   
t/is_deeply_dne_bug.t ...................... ok   
t/is_deeply_fail.t ......................... ok     
t/is_deeply_with_threads.t ................. skipped: many perls have broken threads.  Enable with AUTHOR_TESTING.
t/missing.t ................................ ok   
t/More.t ................................... ok    
t/new_ok.t ................................. ok    
t/no_plan.t ................................ ok     
t/no_tests.t ............................... ok   
t/note.t ................................... ok   
t/OnlyOnePlan/basics.t ..................... ok    
t/OnlyOnePlan/no_state.t ................... ok   
t/overload.t ............................... ok    
t/overload_threads.t ....................... All 5 subtests passed 
    (less 1 skipped subtest: 4 okay)
t/plan.t ................................... ok   
t/plan_bad.t ............................... ok    
t/plan_is_noplan.t ......................... ok   
t/plan_no_plan.t ........................... ok   
t/plan_shouldnt_import.t ................... ok   
t/plan_skip_all.t .......................... skipped: Just testing plan & skip_all
t/pod-coverage.t ........................... skipped: set RELEASE_TESTING to test Pod coverage
t/pod.t .................................... ok    
t/require_ok.t ............................. ok   
t/Result/accessors.t ....................... ok   
t/Result/basics.t .......................... ok    
t/shared_test_state.t ...................... ok   
t/Simple/builder.t ......................... ok   
t/Simple/load.t ............................ ok   
t/Simple/no_plan.t ......................... ok   
t/Simple/pass.t ............................ ok   
t/skip.t ................................... ok    
t/skip_before_plan.t ....................... ok   
t/skipall.t ................................ ok   
t/strays.t ................................. skipped: not completed
t/Streamer/stdout.t ........................ ok   
t/Streamer/Streamer.t ...................... ok   
t/Streamer/threads.t ....................... ok   
t/Streamer/ThreadSafeFilehandleAccessor.t .. ok   
t/subtest/args.t ........................... ok   
t/subtest/bail_out.t ....................... ok   
t/subtest/basic.t .......................... ok   
t/subtest/default.t ........................ ok   
t/subtest/die.t ............................ ok   
t/subtest/do.t ............................. ok   
t/subtest/fork.t ........................... ok   
t/subtest/implicit_done.t .................. ok   
t/subtest/line_numbers.t ................... ok   
t/subtest/plan.t ........................... ok   
t/subtest/predicate.t ...................... ok   
t/subtest/return.t ......................... ok   
t/subtest/threads.t ........................ All 2 subtests passed 
t/subtest/todo.t ........................... ok    
t/subtest/wstat.t .......................... ok   
t/TB1vsTB2.t ............................... ok   
t/tbm_doesnt_set_exported_to.t ............. ok   
t/test_pl/can_isa_ok.t ..................... ok    
t/Tester/args.t ............................ ok     
t/Tester/basic.t ........................... ok   
t/Tester/change_formatter.t ................ ok   
t/Tester/die.t ............................. ok   
t/Tester/errormess.t ....................... ok   
t/Tester/faildiag.t ........................ ok   
t/Tester/fhrestore.t ....................... ok   
t/Tester/import.t .......................... ok    
t/Tester/line_num.t ........................ ok   
t/Tester/skip.t ............................ ok   
t/Tester2/capture.t ........................ ok   
t/Tester2/state_untouched.t ................ ok   
t/thread_taint.t ........................... ok   
t/threads.t ................................ All 1011 subtests passed 
t/todo.t ................................... ok    
t/todo_skip_before_plan.t .................. ok   
t/true_value.t ............................. ok   
t/Types/int.t .............................. ok    
t/undef.t .................................. ok    
t/use_ok.t ................................. ok    
t/use_ok_leaking.t ......................... ok   
t/useing.t ................................. ok   
t/utf8.t ................................... ok   
t/versions.t ............................... ok   

Test Summary Report
-------------------
t/diag.t                                 (Wstat: 11 Tests: 7 Failed: 0)
  Non-zero wait status: 11
t/overload_threads.t                     (Wstat: 11 Tests: 5 Failed: 0)
  Non-zero wait status: 11
t/subtest/threads.t                      (Wstat: 11 Tests: 2 Failed: 0)
  Non-zero wait status: 11
t/threads.t                              (Wstat: 11 Tests: 1011 Failed: 0)
  Non-zero wait status: 11
Files=206, Tests=3118, 29 wallclock secs ( 1.24 usr  0.34 sys + 22.68 cusr  1.76 csys = 26.02 CPU)
Result: FAIL
Failed 4/206 test programs. 0/3118 subtests failed.
make: *** [test_dynamic] Error 255

Above fail executed with:

rabbit@Thesaurus:~/devel/test-more$ perl -V
Summary of my perl5 (revision 5 version 12 subversion 3) configuration:

  Platform:
    osname=linux, osvers=2.6.35-trunk-686, archname=i686-linux-thread-multi-64int-ld
    uname='linux thesaurus 2.6.35-trunk-686 #1 smp tue aug 17 14:30:48 utc 2010 i686 gnulinux '
    config_args='-de -Dprefix=/home/rabbit/perl5/perlbrew/perls/5.12.3 -Dusethreads -Duselargefiles -Dusemorebits'
    hint=recommended, useposix=true, d_sigaction=define
    useithreads=define, usemultiplicity=define
    useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
    use64bitint=define, use64bitall=undef, uselongdouble=define
    usemymalloc=n, bincompat5005=undef
  Compiler:
    cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
    optimize='-O2',
    cppflags='-D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include'
    ccversion='', gccversion='4.4.5', gccosandvers=''
    intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=12345678
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
    ivtype='long long', ivsize=8, nvtype='long double', nvsize=12, Off_t='off_t', lseeksize=8
    alignbytes=4, prototype=define
  Linker and Libraries:
    ld='cc', ldflags =' -fstack-protector -L/usr/local/lib'
    libpth=/usr/local/lib /lib /usr/lib /usr/lib64
    libs=-lnsl -ldb -ldl -lm -lcrypt -lutil -lpthread -lc
    perllibs=-lnsl -ldl -lm -lcrypt -lutil -lpthread -lc
    libc=/lib/libc-2.11.2.so, so=so, useshrplib=false, libperl=libperl.a
    gnulibc_version='2.11.2'
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
    cccdlflags='-fPIC', lddlflags='-shared -O2 -L/usr/local/lib -fstack-protector'


Characteristics of this binary (from libperl): 
  Compile-time options: MULTIPLICITY PERL_DONT_CREATE_GVSV
                        PERL_IMPLICIT_CONTEXT PERL_MALLOC_WRAP USE_64_BIT_INT
                        USE_ITHREADS USE_LARGE_FILES USE_LONG_DOUBLE
                        USE_PERLIO USE_PERL_ATOF USE_REENTRANT_API
  Built under linux
  Compiled at Jan 27 2011 01:23:17
  %ENV:
    PERL5LIB="/home/rabbit/devel/utils/perl:/home/rabbit/devel/distar/lib:"
    PERLBREW_HOME="/home/rabbit/.perlbrew"
    PERLBREW_PATH="/home/rabbit/perl5/perlbrew/bin:/home/rabbit/perl5/perlbrew/perls/5.12.3/bin"
    PERLBREW_PERL="5.12.3"
    PERLBREW_ROOT="/home/rabbit/perl5/perlbrew"
    PERLBREW_VERSION="0.27"
    PERL_AUTOINSTALL_PREFER_CPAN="1"
    PERL_CPANM_OPT="--verbose --no-interactive"
  @INC:
    /home/rabbit/devel/utils/perl
    /home/rabbit/devel/distar/lib
    /home/rabbit/perl5/perlbrew/perls/5.12.3/lib/site_perl/5.12.3/i686-linux-thread-multi-64int-ld
    /home/rabbit/perl5/perlbrew/perls/5.12.3/lib/site_perl/5.12.3
    /home/rabbit/perl5/perlbrew/perls/5.12.3/lib/5.12.3/i686-linux-thread-multi-64int-ld
    /home/rabbit/perl5/perlbrew/perls/5.12.3/lib/5.12.3
    .
@schwern
Copy link
Contributor

schwern commented Mar 21, 2012

Looks like they're seg faulting on exit.

@ribasushi
Copy link
Author

Problem still present on _03 released couple hours ago.

@schwern
Copy link
Contributor

schwern commented Mar 23, 2012

Knocked this down to a problem with the shared_clone() wrapper and/or how defaults are stored.
https://gist.github.com/2169715

schwern added a commit that referenced this issue Mar 25, 2012
For #261

It's something to do with TB2::TestState and one of...
* The wrapper around threads::shared
* That %defaults is not shared

The wrapper needs to be there, so %default got changed.  Unfortunately this means
that all defaults are shared.  Fortunately this really only effects TB2::TestState
which is shared.  Eventually this hack isn't going to work.  Sorry future.
@schwern
Copy link
Contributor

schwern commented Mar 25, 2012

That should "fix" it. A bit distressed we really don't know why it was broken, but that's Perl threads for you.

@schwern schwern closed this as completed Mar 25, 2012
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants