summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorDave Mitchell <davem@fdisolutions.com>2002-05-14 00:48:22 +0100
committerJarkko Hietaniemi <jhi@iki.fi>2002-05-13 23:09:36 +0000
commitafe3852089dde68b99096e1e00a604b53259fbd1 (patch)
treee63c52aca26d93bbd545dc61b6ec05973c02c766 /ext
parent488f41861ce50bf733b1e60ebbef8390e01d3366 (diff)
downloadperl-afe3852089dde68b99096e1e00a604b53259fbd1.tar.gz
various minor fixes in threads.
Message-ID: <20020513234822.G21318@fdgroup.com> p4raw-id: //depot/perl@16586
Diffstat (limited to 'ext')
-rw-r--r--ext/threads/shared/shared.xs22
1 files changed, 19 insertions, 3 deletions
diff --git a/ext/threads/shared/shared.xs b/ext/threads/shared/shared.xs
index 477cdb4846..9b0ca50c66 100644
--- a/ext/threads/shared/shared.xs
+++ b/ext/threads/shared/shared.xs
@@ -1,6 +1,6 @@
-/* sharedsv.c
+/* shared.xs
*
- * Copyright (c) 2001, Larry Wall
+ * Copyright (c) 2001-2002, Larry Wall
*
* You may distribute under the terms of either the GNU General Public
* License or the Artistic License, as specified in the README file.
@@ -723,10 +723,19 @@ Perl_sharedsv_lock(pTHX_ shared_sv* ssv)
recursive_lock_acquire(aTHX_ &ssv->lock, __FILE__, __LINE__);
}
+/* handles calls from lock() builtin via PL_lockhook */
+
void
Perl_sharedsv_locksv(pTHX_ SV *sv)
{
- Perl_sharedsv_lock(aTHX_ Perl_sharedsv_find(aTHX_ sv));
+ shared_sv* shared;
+
+ if(SvROK(sv))
+ sv = SvRV(sv);
+ shared = Perl_sharedsv_find(aTHX, sv);
+ if(!shared)
+ croak("lock can only be used on shared values");
+ Perl_sharedsv_lock(aTHX_ shared);
}
=head1 Shared SV Functions
@@ -914,6 +923,7 @@ _id(SV *ref)
PROTOTYPE: \[$@%]
CODE:
shared_sv *shared;
+ ref = SvRV(ref);
if(SvROK(ref))
ref = SvRV(ref);
if( (shared = Perl_sharedsv_find(aTHX_ ref)) ){
@@ -928,6 +938,7 @@ _refcnt(SV *ref)
PROTOTYPE: \[$@%]
CODE:
shared_sv *shared;
+ ref = SvRV(ref);
if(SvROK(ref))
ref = SvRV(ref);
if( (shared = Perl_sharedsv_find(aTHX_ ref)) ){
@@ -948,6 +959,7 @@ void
share(SV *ref)
PROTOTYPE: \[$@%]
CODE:
+ ref = SvRV(ref);
if(SvROK(ref))
ref = SvRV(ref);
Perl_sharedsv_share(aTHX, ref);
@@ -957,6 +969,7 @@ lock_enabled(SV *ref)
PROTOTYPE: \[$@%]
CODE:
shared_sv* shared;
+ ref = SvRV(ref);
if(SvROK(ref))
ref = SvRV(ref);
shared = Perl_sharedsv_find(aTHX, ref);
@@ -970,6 +983,7 @@ cond_wait_enabled(SV *ref)
CODE:
shared_sv* shared;
int locks;
+ ref = SvRV(ref);
if(SvROK(ref))
ref = SvRV(ref);
shared = Perl_sharedsv_find(aTHX_ ref);
@@ -999,6 +1013,7 @@ cond_signal_enabled(SV *ref)
PROTOTYPE: \[$@%]
CODE:
shared_sv* shared;
+ ref = SvRV(ref);
if(SvROK(ref))
ref = SvRV(ref);
shared = Perl_sharedsv_find(aTHX_ ref);
@@ -1011,6 +1026,7 @@ cond_broadcast_enabled(SV *ref)
PROTOTYPE: \[$@%]
CODE:
shared_sv* shared;
+ ref = SvRV(ref);
if(SvROK(ref))
ref = SvRV(ref);
shared = Perl_sharedsv_find(aTHX_ ref);