Integrate mainline
[p5sagit/p5-mst-13.2.git] / lib / Thread.pm
index 4e88706..7173ac2 100644 (file)
@@ -1,13 +1,11 @@
 package Thread;
 
-$VERSION = '2.00';
-
 use strict;
 
-our $ithreads;
-our $othreads;
+our($VERSION, $ithreads, $othreads);
 
 BEGIN {
+    $VERSION = '2.00';
     use Config;
     $ithreads = $Config{useithreads};
     $othreads = $Config{use5005threads};
@@ -15,13 +13,13 @@ BEGIN {
 
 require Exporter;
 use XSLoader ();
-our($VERSION, @ISA, @EXPORT, @EXPORT_OK);
+our(@ISA, @EXPORT, @EXPORT_OK);
 
 @ISA = qw(Exporter);
 
 BEGIN {
     if ($ithreads) {
-       @EXPORT = qw(share cond_wait cond_broadcast cond_signal unlock)
+       @EXPORT = qw(cond_wait cond_broadcast cond_signal unlock)
     } elsif ($othreads) {
        @EXPORT_OK = qw(cond_signal cond_broadcast cond_wait);
     }
@@ -315,24 +313,28 @@ sub unimplement {
 
 BEGIN {
     if ($ithreads) {
+       if ($othreads) {
+           require Carp;
+           Carp::croak("This Perl has both ithreads and 5005threads (serious malconfiguration)");
+       }
        XSLoader::load 'threads';
-       for my $m (qw(new join detach yield self tid equal)) {
+       for my $m (qw(new join detach yield self tid equal list)) {
            no strict 'refs';
            *{"Thread::$m"} = \&{"threads::$m"};
        }
-       XSLoader::load 'threads::shared';
-       for my $m (qw(cond_signal cond_broadcast cond_wait unlock share)) {
+       require 'threads/shared.pm';
+       for my $m (qw(cond_signal cond_broadcast cond_wait unlock)) {
            no strict 'refs';
            *{"Thread::$m"} = \&{"threads::shared::${m}_enabled"};
        }
        # trying to unimplement eval gives redefined warning
-       unimplement(qw(list done flags));
+       unimplement(qw(done flags));
     } elsif ($othreads) {
        XSLoader::load 'Thread';
        unimplement(qw(unlock));
     } else {
        require Carp;
-       Carp::croak("This Perl has neither ithreads not 5005threads");
+       Carp::croak("This Perl has neither ithreads nor 5005threads");
     }
 }