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.

Reply via email to