Update documentation with &share() non prototype checking version.
Artur Bergman [Tue, 9 Jul 2002 21:23:31 +0000 (21:23 +0000)]
Fix share so it once again returns a reference to whatever it just
shared, so now you can do my &share([]);
Remove check for useithreads and Config.pm from threads::shared,
you can now always use threads::shared in your module without
overhead of config.pm and without speed hit unless threads have been
requested, share, cond_wait, cond_broadcast, cond_signal and lock
all become noops, so does : share.

p4raw-id: //depot/perl@17453

ext/threads/shared/shared.pm
ext/threads/shared/shared.xs

index 8f3c677..d7d67de 100644 (file)
@@ -3,36 +3,13 @@ package threads::shared;
 use 5.007_003;
 use strict;
 use warnings;
-use Config;
-
-BEGIN {
-    unless ($Config{useithreads}) {
-       my @caller = caller(2);
-        die <<EOF;
-$caller[1] line $caller[2]:
-
-This Perl hasn't been configured and built properly for the threads
-module to work.  (The 'useithreads' configuration option hasn't been used.)
-
-Having threads support requires all of Perl and all of the XS modules in
-the Perl installation to be rebuilt, it is not just a question of adding
-the threads module.  (In other words, threaded and non-threaded Perls
-are binary incompatible.)
-
-If you want to the use the threads module, please contact the people
-who built your Perl.
-
-Cannot continue, aborting.
-EOF
-    }
-}
 
 require Exporter;
 our @ISA = qw(Exporter);
 our @EXPORT = qw(share cond_wait cond_broadcast cond_signal _refcnt _id _thrcnt);
 our $VERSION = '0.90';
 
-if ($Config{'useithreads'}) {
+if ($threads::threads) {
        *cond_wait = \&cond_wait_enabled;
        *cond_signal = \&cond_signal_enabled;
        *cond_broadcast = \&cond_broadcast_enabled;
@@ -77,8 +54,8 @@ threads::shared - Perl extension for sharing data structures between threads
   share($scalar);
   share(@array);
   share(%hash);
-  my $bar = share([]);
-  $hash{bar} = share({});
+  my $bar = &share([]);
+  $hash{bar} = &share({});
 
   { lock(%hash); ...  }
 
@@ -112,6 +89,9 @@ C<share(\$a)> is equivalent to C<share($a)>, while C<share(\\$a)> is not.
 A variable can also be marked as shared at compile time by using the
 C<shared> attribute: C<my $var : shared>.
 
+If you want to share a newly created reference, unfourtunetly you need to use
+C<&share([])> and C<&share({})> syntax due to problems with perls prototyping.
+
 =item lock VARIABLE
 
 C<lock> places a lock on a variable until the lock goes out of scope.  If
index 14524f6..2a08fb0 100644 (file)
@@ -743,7 +743,6 @@ Perl_sharedsv_locksv(pTHX_ SV *sv)
 =for apidoc sharedsv_init
 
 Saves a space for keeping SVs wider than an interpreter,
-currently only stores a pointer to the first interpreter.
 
 =cut
 
@@ -955,7 +954,7 @@ CODE:
        }
        XSRETURN_UNDEF;
 
-void
+SV*
 share(SV *ref)
        PROTOTYPE: \[$@%]
        CODE:
@@ -963,6 +962,9 @@ share(SV *ref)
        if(SvROK(ref))
            ref = SvRV(ref);
        Perl_sharedsv_share(aTHX_ ref);
+       RETVAL = newRV(ref);
+       OUTPUT:
+       RETVAL
 
 void
 lock_enabled(SV *ref)