Add support for my $foo : shared;
[p5sagit/p5-mst-13.2.git] / ext / threads / shared / shared.pm
index c71dfb3..83bd92c 100644 (file)
@@ -5,33 +5,30 @@ use Config;
 
 require Exporter;
 our @ISA = qw(Exporter);
-our @EXPORT = qw(share cond_wait cond_broadcast cond_signal unlock);
+our @EXPORT = qw(share cond_wait cond_broadcast cond_signal _refcnt _id _thrcnt);
 our $VERSION = '0.90';
 
-use XSLoader;
-XSLoader::load('threads::shared',$VERSION);
+use Attribute::Handlers;
 
-BEGIN {
-    if ($Config{'useithreads'}) {
+
+if ($Config{'useithreads'}) {
        *cond_wait = \&cond_wait_enabled;
        *cond_signal = \&cond_signal_enabled;
        *cond_broadcast = \&cond_broadcast_enabled;
-       *unlock = \&unlock_enabled;
-    } else {
+       require XSLoader;
+       XSLoader::load('threads::shared',$VERSION);
+}
+else {
        *share = \&share_disabled;
        *cond_wait = \&cond_wait_disabled;
        *cond_signal = \&cond_signal_disabled;
        *cond_broadcast = \&cond_broadcast_disabled;
-       *unlock = \&unlock_disabled;
-    }
 }
 
 
 sub cond_wait_disabled { return @_ };
 sub cond_signal_disabled { return @_};
 sub cond_broadcast_disabled { return @_};
-sub unlock_disabled { 1 };
-sub lock_disabled { 1 }
 sub share_disabled { return @_}
 
 $threads::shared::threads_shared = 1;
@@ -43,6 +40,10 @@ sub threads::shared::tie::SPLICE
  die "Splice not implemented for shared arrays";
 }
 
+sub UNIVERSAL::shared : ATTR {
+    my ($package, $symbol, $referent, $attr, $data, $phase) = @_;
+    share($referent);
+}
 
 __END__