X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=sharedsv.h;h=f82804dba47e31ebf644f869706eac2f48f26fa3;hb=9459710475e45fb4a97fce8a8bc59383952cc617;hp=f92a94a08ea166d7aeee3b0db7e2edcc721624ce;hpb=39696b0cdb512c61354df443d2f0b56bef0d4d8b;p=p5sagit%2Fp5-mst-13.2.git diff --git a/sharedsv.h b/sharedsv.h index f92a94a..f82804d 100644 --- a/sharedsv.h +++ b/sharedsv.h @@ -1,39 +1,29 @@ - #ifdef USE_ITHREADS typedef struct { - SV* sv; /* The actual data */ - perl_mutex mutex; /* Our mutex */ - perl_cond cond; /* Our condition variable */ - perl_cond user_cond; /* For user level conditions */ - IV locks; /* Number of locks held */ - PerlInterpreter* owner; /* who owns the lock */ + SV *sv; /* The actual SV */ + perl_mutex mutex; /* Our mutex */ + perl_cond cond; /* Our condition variable */ + perl_cond user_cond; /* For user-level conditions */ + IV locks; /* Number of locks held */ + PerlInterpreter *owner; /* Who owns the lock? */ + U16 index; /* Update index */ } shared_sv; -extern PerlInterpreter* sharedsv_space; -extern perl_mutex sharedsv_space_mutex; - -void Perl_sharedsv_unlock_scope(pTHX_ shared_sv* ssv); -void Perl_sharedsv_unlock(pTHX_ shared_sv* ssv); -void Perl_sharedsv_lock(pTHX_ shared_sv* ssv); -void Perl_sharedsv_init(pTHX); -shared_sv* Perl_sharedsv_new(pTHX); -shared_sv* Perl_sharedsv_find(pTHX_ SV* sv); -void Perl_sharedsv_thrcnt_inc(pTHX_ shared_sv* ssv); -void Perl_sharedsv_thrcnt_dec(pTHX_ shared_sv* ssv); +#define SHAREDSvGET(a) (a->sv) +#define SHAREDSvLOCK(a) Perl_sharedsv_lock(aTHX_ a) +#define SHAREDSvUNLOCK(a) Perl_sharedsv_unlock(aTHX_ a) +#define SHAREDSvEDIT(a) STMT_START { \ + MUTEX_LOCK(&PL_sharedsv_space_mutex); \ + SHAREDSvLOCK((a)); \ + PERL_SET_CONTEXT(PL_sharedsv_space); \ + } STMT_END -#define SHAREDSvGET(a) (a->sv) -#define SHAREDSvEDIT(a) { MUTEX_LOCK(&sharedsv_space_mutex);\ -SHAREDSvLOCK((a));\ -PERL_SET_CONTEXT(sharedsv_space);\ -} -#define SHAREDSvRELEASE(a) { PERL_SET_CONTEXT((a)->owner);\ -SHAREDSvUNLOCK((a));\ -MUTEX_UNLOCK(&sharedsv_space_mutex);\ -} -#define SHAREDSvLOCK(a) Perl_sharedsv_lock(aTHX_ a) -#define SHAREDSvUNLOCK(a) Perl_sharedsv_unlock(aTHX_ a) +#define SHAREDSvRELEASE(a) STMT_START { \ + PERL_SET_CONTEXT((a)->owner); \ + SHAREDSvUNLOCK((a)); \ + MUTEX_UNLOCK(&PL_sharedsv_space_mutex); \ + } STMT_END #endif /* USE_ITHREADS */ -