]> git.vpit.fr Git - perl/modules/autovivification.git/commitdiff
Skip threads tests unless perl version is 5.13.4 or greater
authorVincent Pit <vince@profvince.com>
Sun, 3 Oct 2010 00:31:48 +0000 (02:31 +0200)
committerVincent Pit <vince@profvince.com>
Sun, 3 Oct 2010 00:31:48 +0000 (02:31 +0200)
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.

t/50-threads.t
t/51-threads-teardown.t

index 99aa1ada3ca263c932c851f4cccf20f252ae47f8..258bf08f8ab15fb1dbd8f41e16c3c496db5c13d7 100644 (file)
@@ -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_AUTOVIVIFICATION_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 autovivification;
- if (autovivification::A_THREADSAFE()) {
-  plan tests => 10 * 2 * 3 * (1 + 2);
-  defined and diag "Using threads $_" for $threads::VERSION;
- } else {
-  plan skip_all => 'This autovivification isn\'t thread safe';
- }
+ skipall 'This autovivification isn\'t thread safe'
+                                        unless autovivification::A_THREADSAFE();
+ plan tests => 10 * 2 * 3 * (1 + 2);
+ defined and diag "Using threads $_" for $threads::VERSION;
 }
 
 {
index d769fb62d62fc7f4edb1ca03c30efdde71b9ec31..d825f91bb5c2689e852af1a40211b192af4b3f0d 100644 (file)
@@ -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_AUTOVIVIFICATION_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 autovivification;
- if (autovivification::A_THREADSAFE()) {
-  plan tests => 1;
-  defined and diag "Using threads $_" for $threads::VERSION;
- } else {
-  plan skip_all => 'This autovivification isn\'t thread safe';
- }
+ skipall 'This autovivification isn\'t thread safe'
+                                        unless autovivification::A_THREADSAFE();
+ plan tests => 1;
+ defined and diag "Using threads $_" for $threads::VERSION;
 }
 
 sub run_perl {