5 if ($ENV{'PERL_CORE'}){
7 unshift @INC, '../lib';
10 require($ENV{PERL_CORE} ? "./test.pl" : "./t/test.pl");
13 if (! $Config{'useithreads'}) {
14 skip_all(q/Perl not compiled with 'useithreads'/);
20 use ExtUtils::testlib;
25 if (! eval 'use threads::shared; 1') {
26 skip_all('threads::shared not available');
30 print("1..18\n"); ### Number of tests that will be run ###
35 ### Start of Testing ###
37 $SIG{'__WARN__'} = sub {
39 ok(0, "WARN in main: $msg");
41 $SIG{'__DIE__'} = sub {
43 ok(0, "DIE in main: $msg");
47 my $thr = threads->create(sub {
49 return (99); # Not seen
51 ok($thr, 'Created: threads->exit()');
52 my $rc = $thr->join();
53 ok(! defined($rc), 'Exited: threads->exit()');
56 run_perl(prog => 'use threads 1.72;' .
57 'threads->exit(86);' .
59 nolib => ($ENV{PERL_CORE}) ? 0 : 1,
60 switches => ($ENV{PERL_CORE}) ? [] : [ '-Mblib' ]);
62 local $TODO = 'VMS exit semantics not like POSIX exit semantics' if $^O eq 'VMS';
63 is($?>>8, 86, 'thread->exit(status) in main');
66 $thr = threads->create({'exit' => 'thread_only'}, sub {
68 return (99); # Not seen
70 ok($thr, 'Created: thread_only');
72 ok(! defined($rc), 'Exited: thread_only');
75 $thr = threads->create(sub {
76 threads->set_thread_exit_only(1);
78 return (99); # Not seen
80 ok($thr, 'Created: threads->set_thread_exit_only');
82 ok(! defined($rc), 'Exited: threads->set_thread_exit_only');
86 $thr = threads->create(sub {
92 return (99); # Not seen
95 ok($thr, 'Created: $thr->set_thread_exit_only');
96 $thr->set_thread_exit_only(1);
100 cond_broadcast($WAIT);
103 ok(! defined($rc), 'Exited: $thr->set_thread_exit_only');
106 run_perl(prog => 'use threads 1.72 qw(exit thread_only);' .
107 'threads->create(sub { exit(99); })->join();' .
109 nolib => ($ENV{PERL_CORE}) ? 0 : 1,
110 switches => ($ENV{PERL_CORE}) ? [] : [ '-Mblib' ]);
112 local $TODO = 'VMS exit semantics not like POSIX exit semantics' if $^O eq 'VMS';
113 is($?>>8, 86, "'use threads 'exit' => 'thread_only'");
116 my $out = run_perl(prog => 'use threads 1.72;' .
117 'threads->create(sub {' .
122 nolib => ($ENV{PERL_CORE}) ? 0 : 1,
123 switches => ($ENV{PERL_CORE}) ? [] : [ '-Mblib' ],
126 local $TODO = 'VMS exit semantics not like POSIX exit semantics' if $^O eq 'VMS';
127 is($?>>8, 99, "exit(status) in thread");
129 like($out, '1 finished and unjoined', "exit(status) in thread");
132 $out = run_perl(prog => 'use threads 1.72 qw(exit thread_only);' .
133 'threads->create(sub {' .
134 ' threads->set_thread_exit_only(0);' .
139 nolib => ($ENV{PERL_CORE}) ? 0 : 1,
140 switches => ($ENV{PERL_CORE}) ? [] : [ '-Mblib' ],
143 local $TODO = 'VMS exit semantics not like POSIX exit semantics' if $^O eq 'VMS';
144 is($?>>8, 99, "set_thread_exit_only(0)");
146 like($out, '1 finished and unjoined', "set_thread_exit_only(0)");
149 run_perl(prog => 'use threads 1.72;' .
150 'threads->create(sub {' .
151 ' $SIG{__WARN__} = sub { exit(99); };' .
155 nolib => ($ENV{PERL_CORE}) ? 0 : 1,
156 switches => ($ENV{PERL_CORE}) ? [] : [ '-Mblib' ]);
158 local $TODO = 'VMS exit semantics not like POSIX exit semantics' if $^O eq 'VMS';
159 is($?>>8, 99, "exit(status) in thread warn handler");
162 $thr = threads->create(sub {
163 $SIG{__WARN__} = sub { threads->exit(); };
164 local $SIG{__DIE__} = 'DEFAULT';
167 ok($thr, 'Created: threads->exit() in thread warn handler');
169 ok(! defined($rc), 'Exited: threads->exit() in thread warn handler');