diff options
author | Dave Mitchell <davem@fdisolutions.com> | 2002-05-14 00:48:22 +0100 |
---|---|---|
committer | Jarkko Hietaniemi <jhi@iki.fi> | 2002-05-13 23:09:36 +0000 |
commit | afe3852089dde68b99096e1e00a604b53259fbd1 (patch) | |
tree | e63c52aca26d93bbd545dc61b6ec05973c02c766 /ext | |
parent | 488f41861ce50bf733b1e60ebbef8390e01d3366 (diff) | |
download | perl-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.xs | 22 |
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); |