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.
use strict;
use warnings;
use strict;
use warnings;
+sub skipall {
+ my ($msg) = @_;
+ require Test::More;
+ Test::More::plan(skip_all => $msg);
+}
+
use Config qw/%Config/;
BEGIN {
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;
BEGIN {
delete $ENV{PERL_INDIRECT_PM_DISABLE};
require indirect;
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;
use strict;
use warnings;
use strict;
use warnings;
+sub skipall {
+ my ($msg) = @_;
+ require Test::More;
+ Test::More::plan(skip_all => $msg);
+}
+
use Config qw/%Config/;
BEGIN {
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;
BEGIN {
delete $ENV{PERL_INDIRECT_PM_DISABLE};
require indirect;
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;