X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=t%2F31-threads-teardown.t;fp=t%2F31-threads-teardown.t;h=632293b6373a5057c3e609da3e8e51a720686a62;hb=333c198120153b0cfe076fcb54e100dcf0eb9fb4;hp=0000000000000000000000000000000000000000;hpb=158a53a77c240a1fed59318ecacb5bb20eb11f1d;p=perl%2Fmodules%2FLexical-Types.git diff --git a/t/31-threads-teardown.t b/t/31-threads-teardown.t new file mode 100644 index 0000000..632293b --- /dev/null +++ b/t/31-threads-teardown.t @@ -0,0 +1,62 @@ +#!perl + +use strict; +use warnings; + +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'); + } +} + +use threads; + +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'; + } +} + +sub run_perl { + my $code = shift; + + local %ENV; + system { $^X } $^X, '-T', map("-I$_", @INC), '-e', $code; +} + +SKIP: +{ + skip 'Fails on 5.8.2 and lower' => 1 if $] <= 5.008002; + + my $status = run_perl <<' RUN'; + { package IntX; package IntY; package IntZ; } + my ($code, @expected); + sub cb { + my $e = shift(@expected) || q{DUMMY}; + --$code if $_[0] eq $e; + () + } + use threads; + $code = threads->create(sub { + $code = @expected = qw/IntX/; + eval q{use Lexical::Types as => \&cb; my IntX $x;}; die if $@; + return $code; + })->join; + $code += @expected = qw/IntZ/; + eval q{my IntY $y;}; die if $@; + eval q{use Lexical::Types as => \&cb; my IntZ $z;}; die if $@; + $code += 256 if $code < 0; + exit $code; + RUN + is $status, 0, 'loading the pragma in a thread and using it outside doesn\'t segfault'; +}