summaryrefslogtreecommitdiff
path: root/ext/threads/t/end.t
diff options
context:
space:
mode:
Diffstat (limited to 'ext/threads/t/end.t')
-rw-r--r--ext/threads/t/end.t41
1 files changed, 41 insertions, 0 deletions
diff --git a/ext/threads/t/end.t b/ext/threads/t/end.t
new file mode 100644
index 0000000000..199ca4771a
--- /dev/null
+++ b/ext/threads/t/end.t
@@ -0,0 +1,41 @@
+
+BEGIN {
+ chdir 't' if -d 't';
+ @INC = '../lib';
+ require Config; import Config;
+ unless ($Config{'useithreads'}) {
+ print "1..0 # Skip: no useithreads\n";
+ exit 0;
+ }
+}
+
+use ExtUtils::testlib;
+use strict;
+BEGIN { print "1..6\n" };
+use threads;
+use threads::shared;
+
+my $test_id = 1;
+share($test_id);
+use Devel::Peek qw(Dump);
+
+sub ok {
+ my ($ok, $name) = @_;
+
+ # You have to do it this way or VMS will get confused.
+ print $ok ? "ok $test_id - $name\n" : "not ok $test_id - $name\n";
+
+ printf "# Failed test at line %d\n", (caller)[2] unless $ok;
+ $test_id++;
+ return $ok;
+}
+ok(1);
+END { ok(1,"End block run once") }
+threads->create(sub { eval "END { ok(1,'') }"})->join();
+threads->create(sub { eval "END { ok(1,'') }"})->join();
+threads->create(\&thread)->join();
+
+sub thread {
+ eval "END { ok(1,'') }";
+ threads->create(sub { eval "END { ok(1,'') }"})->join();
+}