Change 14030 by ams@lustre on 2002/01/02 23:56:37
Subject: [PATCH @14015] threads::shared disabling
From: Andy Bussey <[EMAIL PROTECTED]>
Date: Thu, 3 Jan 2002 00:46:58 +0000 (GMT)
Message-Id: <[EMAIL PROTECTED]>
Affected files ...
.... //depot/perl/MANIFEST#691 edit
.... //depot/perl/ext/threads/shared/shared.pm#12 edit
.... //depot/perl/ext/threads/shared/t/no_share.t#1 add
.... //depot/perl/ext/threads/threads.pm#8 edit
Differences ...
==== //depot/perl/MANIFEST#691 (text) ====
Index: perl/MANIFEST
--- perl/MANIFEST.~1~ Wed Jan 2 17:00:06 2002
+++ perl/MANIFEST Wed Jan 2 17:00:06 2002
@@ -604,6 +604,7 @@
ext/threads/shared/t/av_simple.t Tests for basic shared array functionality.
ext/threads/shared/t/hv_refs.t Test shared hashes containing references
ext/threads/shared/t/hv_simple.t Tests for basic shared hash functionality.
+ext/threads/shared/t/no_share.t Tests for disabled share on variables.
ext/threads/shared/t/sv_refs.t thread shared variables
ext/threads/shared/t/sv_simple.t thread shared variables
ext/threads/t/basic.t ithreads
==== //depot/perl/ext/threads/shared/shared.pm#12 (text) ====
Index: perl/ext/threads/shared/shared.pm
--- perl/ext/threads/shared/shared.pm.~1~ Wed Jan 2 17:00:06 2002
+++ perl/ext/threads/shared/shared.pm Wed Jan 2 17:00:06 2002
@@ -17,7 +17,7 @@
*share = \&share_disabled;
*cond_wait = \&cond_wait_disabled;
*cond_signal = \&cond_signal_disabled;
- *cond_broadcast = \&cond_broadcast_dosabled;
+ *cond_broadcast = \&cond_broadcast_disabled;
*unlock = \&unlock_disabled;
}
}
@@ -100,6 +100,9 @@
}
package threads::shared;
+
+$threads::shared::threads_shared = 1;
+
bootstrap threads::shared $VERSION;
__END__
@@ -205,6 +208,14 @@
C<cond_broadcast>, though, will unblock B<all> the threads that are blocked
in a C<cond_wait> on the locked variable, rather than only one.
+
+=head1 NOTES
+
+threads::shared is designed is disable itself silently if threads are
+not available. If you want access to threads, you must C<use threads>
+before you C<use threads::shared>. threads will emit a warning if you
+use it before threads::shared.
+
=head1 BUGS
C<bless> is not supported on shared references, in the current version
==== //depot/perl/ext/threads/threads.pm#8 (xtext) ====
Index: perl/ext/threads/threads.pm
--- perl/ext/threads/threads.pm.~1~ Wed Jan 2 17:00:06 2002
+++ perl/ext/threads/threads.pm Wed Jan 2 17:00:06 2002
@@ -10,6 +10,13 @@
#use threads::Shared;
+BEGIN {
+ warn "Warning, threads::shared has already been loaded. ".
+ "To enable shared variables for these modules 'use threads' ".
+ "must be called before any of those modules are loaded\n"
+ if($threads::shared::threads_shared);
+}
+
require Exporter;
require DynaLoader;
@@ -83,7 +90,10 @@
It is also important to note that you preferably enable threads by
doing C<use threads> as early as possible and that it is not possible
-to enable threading inside an eval "";
+to enable threading inside an eval ""; In particular, if you are
+intending to share variables with threads::shared, you must
+C<use threads> before you C<use threads::shared> and threads will emit
+a warning if you do it the other way around.
=over
==== //depot/perl/ext/threads/shared/t/no_share.t#1 (text) ====
Index: perl/ext/threads/shared/t/no_share.t
--- perl/ext/threads/shared/t/no_share.t.~1~ Wed Jan 2 17:00:06 2002
+++ perl/ext/threads/shared/t/no_share.t Wed Jan 2 17:00:06 2002
@@ -0,0 +1,47 @@
+
+
+
+
+BEGIN {
+# chdir 't' if -d 't';
+# push @INC ,'../lib';
+ require Config; import Config;
+ unless ($Config{'useithreads'}) {
+ print "1..0 # Skip: no useithreads\n";
+ exit 0;
+ }
+ $SIG{__WARN__} = sub { $warnmsg = shift; };
+}
+
+
+sub ok {
+ my ($id, $ok, $name) = @_;
+
+ # You have to do it this way or VMS will get confused.
+ print $ok ? "ok $id - $name\n" : "not ok $id - $name\n";
+
+ printf "# Failed test at line %d\n", (caller)[2] unless $ok;
+
+ return $ok;
+}
+
+our $warnmsg;
+use ExtUtils::testlib;
+use strict;
+BEGIN { print "1..5\n" };
+use threads::shared;
+use threads;
+ok(1,1,"loaded");
+ok(2,$warnmsg =~ /Warning, threads::shared has already been loaded/,
+ "threads has warned us");
+my $test = "bar";
+share($test);
+ok(3,$test eq "bar","Test disabled share not interfering");
+threads->create(
+ sub {
+ ok(4,$test eq "bar","Test disabled share after thread");
+ $test = "baz";
+ })->join();
+ok(5,$test eq "bar","Test that value hasn't changed in another thread");
+
+
End of Patch.