From: Vincent Pit Date: Mon, 3 Jan 2011 14:59:22 +0000 (+0100) Subject: Skip threads tests unless perl version is 5.13.4 or greater X-Git-Tag: v0.10~4 X-Git-Url: http://git.vpit.fr/?p=perl%2Fmodules%2FLexical-Types.git;a=commitdiff_plain;h=569b0505de7c5021759a402e898c1fcaaee2caac;hp=48bb92f016120656801f1920c9ef680201afe0a9 Skip threads tests unless perl version is 5.13.4 or greater There was a long standing bug in the handling of GV <-> CV double linkage that could (and explicitely did with a poisonous perl) cause segfaults at thread destruction. It got fixed by Dave in commit 803f274 which went in 5.13.3, but the fix was amended for 5.13.4 in commit 09aad8f. Since it's not really fair for the user to not be able to install the module because of this, we skip the threads tests unless perl is at least 5.13.4. --- diff --git a/t/30-threads.t b/t/30-threads.t index aa42d69..5122dd7 100644 --- a/t/30-threads.t +++ b/t/30-threads.t @@ -3,14 +3,20 @@ use strict; use warnings; +sub skipall { + my ($msg) = @_; + require Test::More; + Test::More::plan(skip_all => $msg); +} + use Config qw/%Config/; BEGIN { - if (!$Config{useithreads}) { - require Test::More; - Test::More->import; - plan(skip_all => 'This perl wasn\'t built to support threads'); - } + my $force = $ENV{PERL_LEXICAL_TYPES_TEST_THREADS} ? 1 : !1; + skipall 'This perl wasn\'t built to support threads' + unless $Config{useithreads}; + skipall 'perl 5.13.4 required to test thread safety' + unless $force or $] >= 5.013004; } use threads; @@ -19,12 +25,10 @@ use Test::More; BEGIN { require Lexical::Types; - if (Lexical::Types::LT_THREADSAFE()) { - plan tests => 10 * 2 * 3 * (1 + 2); - defined and diag "Using threads $_" for $threads::VERSION; - } else { - plan skip_all => 'This Lexical::Types isn\'t thread safe'; - } + skipall 'This Lexical::Types isn\'t thread safe' + unless Lexical::Types::LT_THREADSAFE(); + plan tests => 10 * 2 * 3 * (1 + 2); + defined and diag "Using threads $_" for $threads::VERSION; } { diff --git a/t/31-threads-teardown.t b/t/31-threads-teardown.t index 2354e60..3066182 100644 --- a/t/31-threads-teardown.t +++ b/t/31-threads-teardown.t @@ -3,14 +3,20 @@ use strict; use warnings; +sub skipall { + my ($msg) = @_; + require Test::More; + Test::More::plan(skip_all => $msg); +} + use Config qw/%Config/; BEGIN { - if (!$Config{useithreads}) { - require Test::More; - Test::More->import; - plan(skip_all => 'This perl wasn\'t built to support threads'); - } + my $force = $ENV{PERL_LEXICAL_TYPES_TEST_THREADS} ? 1 : !1; + skipall 'This perl wasn\'t built to support threads' + unless $Config{useithreads}; + skipall 'perl 5.13.4 required to test thread safety' + unless $force or $] >= 5.013004; } use threads; @@ -19,12 +25,10 @@ use Test::More; BEGIN { require Lexical::Types; - if (Lexical::Types::LT_THREADSAFE()) { - plan tests => 1; - defined and diag "Using threads $_" for $threads::VERSION; - } else { - plan skip_all => 'This Lexical::Types isn\'t thread safe'; - } + skipall 'This Lexical::Types isn\'t thread safe' + unless Lexical::Types::LT_THREADSAFE(); + plan tests => 1; + defined and diag "Using threads $_" for $threads::VERSION; } sub run_perl {