xref: /openbsd/gnu/usr.bin/perl/t/thread_it.pl (revision 17df1aa7)
1#!perl
2use strict;
3use warnings;
4
5use Config;
6if (!$Config{useithreads}) {
7    print "1..0 # Skip: no ithreads\n";
8    exit 0;
9}
10if ($ENV{PERL_CORE_MINITEST}) {
11    print "1..0 # Skip: no dynamic loading on miniperl, no threads\n";
12    exit 0;
13}
14
15require threads;
16
17sub thread_it {
18    # Generate things like './op/regexp.t', './t/op/regexp.t', ':op:regexp.t'
19    my @paths
20	= (join ('/', '.', @_), join ('/', '.', 't', @_), join (':', @_));
21
22    for my $file (@paths) {
23	if (-r $file) {
24	    print "# found tests in $file\n";
25	    $::running_as_thread = "running tests in a new thread";
26	    do $file or die $@;
27	    print "# running tests in a new thread\n";
28	    my $curr = threads->create(sub {
29		run_tests();
30		return defined &curr_test ? curr_test() : ()
31	    })->join();
32	    curr_test($curr) if defined $curr;
33	    exit;
34	}
35    }
36    die "Cannot find " . join (" or ", @paths) . "\n";
37}
38
391;
40