summaryrefslogtreecommitdiff
path: root/t
diff options
context:
space:
mode:
authorStas Bekman <stas@stason.org>2003-12-23 07:32:26 -0800
committerRafael Garcia-Suarez <rgarciasuarez@gmail.com>2004-01-20 21:16:01 +0000
commitf935b2f67f1c88a353de5d1c0f7792d9812d8f31 (patch)
tree5734186eff8fbe4bbf372ca5ddaabf20bf2a6839 /t
parent6909cc55000f14d567d0ce4e72f02e1e4307904f (diff)
downloadperl-f935b2f67f1c88a353de5d1c0f7792d9812d8f31.tar.gz
Add a new test file for situations where threads may interfere.
Subject: Re: "restricted hashes" hit again ! Message-ID: <3FE8D08A.4090806@stason.org> p4raw-id: //depot/perl@22186
Diffstat (limited to 't')
-rw-r--r--t/op/threads.t61
1 files changed, 61 insertions, 0 deletions
diff --git a/t/op/threads.t b/t/op/threads.t
new file mode 100644
index 0000000000..02ae213b34
--- /dev/null
+++ b/t/op/threads.t
@@ -0,0 +1,61 @@
+#!./perl
+BEGIN {
+ chdir 't' if -d 't';
+ unshift @INC, '../lib';
+ require './test.pl'; # for which_perl() etc
+}
+
+use strict;
+use Config;
+
+BEGIN {
+ if (!$Config{useithreads}) {
+ print "1..0 # Skip: no ithreads\n";
+ exit 0;
+ }
+ eval 'use threads';
+ if ($@ =~ /dynamic loading not available/) {
+ print "1..0 # Skip: miniperl can't load threads\n";
+ exit 0;
+ }
+ plan(3);
+}
+
+# test that we don't get:
+# Attempt to free unreferenced scalar: SV 0x40173f3c
+fresh_perl_is(<<'EOI', 'ok', { }, 'delete() under threads');
+use threads;
+threads->new(sub { my %h=(1,2); delete $h{1}})->join for 1..2;
+print "ok";
+EOI
+
+#PR24660
+# test that we don't get:
+# Attempt to free unreferenced scalar: SV 0x814e0dc.
+fresh_perl_is(<<'EOI', 'ok', { }, 'weaken ref under threads');
+use threads;
+use Scalar::Util;
+my $data = "a";
+my $obj = \$data;
+my $copy = $obj;
+Scalar::Util::weaken($copy);
+threads->new(sub { 1 })->join for (1..1);
+print "ok";
+EOI
+
+#PR24663
+# test that we don't get:
+# panic: magic_killbackrefs.
+# Scalars leaked: 3
+fresh_perl_is(<<'EOI', 'ok', { }, 'weaken ref #2 under threads');
+package Foo;
+sub new { bless {},shift }
+package main;
+use threads;
+use Scalar::Util qw(weaken);
+my $object = Foo->new;
+my $ref = $object;
+weaken $ref;
+threads->new(sub { $ref = $object } )->join; # $ref = $object causes problems
+print "ok";
+EOI