From: Vincent Pit Date: Sat, 2 Oct 2010 23:35:11 +0000 (+0200) Subject: Skip threads tests unless perl version is 5.13.4 or greater X-Git-Tag: v0.23~1 X-Git-Url: http://git.vpit.fr/?p=perl%2Fmodules%2Findirect.git;a=commitdiff_plain;h=b380c989af97df9d8ee8adf081c3aed4f7b6309b 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/40-threads.t b/t/40-threads.t index 16af4ca..63869b8 100644 --- a/t/40-threads.t +++ b/t/40-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_INDIRECT_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; @@ -20,12 +26,9 @@ use Test::More; BEGIN { delete $ENV{PERL_INDIRECT_PM_DISABLE}; require indirect; - if (indirect::I_THREADSAFE()) { - plan tests => 10 * 2 * (2 + 3); - defined and diag "Using threads $_" for $threads::VERSION; - } else { - plan skip_all => 'This indirect isn\'t thread safe'; - } + skipall 'This indirect isn\'t thread safe' unless indirect::I_THREADSAFE(); + plan tests => 10 * 2 * (2 + 3); + defined and diag "Using threads $_" for $threads::VERSION; } sub expect { diff --git a/t/41-threads-teardown.t b/t/41-threads-teardown.t index b2186e8..3bbed52 100644 --- a/t/41-threads-teardown.t +++ b/t/41-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_INDIRECT_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; @@ -20,12 +26,9 @@ use Test::More; BEGIN { delete $ENV{PERL_INDIRECT_PM_DISABLE}; require indirect; - if (indirect::I_THREADSAFE()) { - plan tests => 1; - defined and diag "Using threads $_" for $threads::VERSION; - } else { - plan skip_all => 'This indirect isn\'t thread safe'; - } + skipall 'This indirect isn\'t thread safe' unless indirect::I_THREADSAFE(); + plan tests => 1; + defined and diag "Using threads $_" for $threads::VERSION; } sub run_perl {