Commit | Line | Data |
---|---|---|
cd1ee231 JH |
1 | |
2 | #ifdef USE_ITHREADS | |
3 | ||
4 | typedef struct { | |
5 | SV* sv; /* The actual data */ | |
6 | perl_mutex mutex; /* Our mutex */ | |
7 | perl_cond cond; /* Our condition variable */ | |
8 | IV locks; /* Number of locks held */ | |
9 | PerlInterpreter* owner; /* who owns the lock */ | |
10 | } shared_sv; | |
11 | ||
12 | extern PerlInterpreter* sharedsv_space; | |
667883b0 | 13 | extern perl_mutex sharedsv_space_mutex; |
cd1ee231 JH |
14 | |
15 | void Perl_sharedsv_unlock_scope(pTHX_ shared_sv* ssv); | |
16 | void Perl_sharedsv_unlock(pTHX_ shared_sv* ssv); | |
17 | void Perl_sharedsv_lock(pTHX_ shared_sv* ssv); | |
18 | void Perl_sharedsv_init(pTHX); | |
19 | shared_sv* Perl_sharedsv_new(pTHX); | |
20 | shared_sv* Perl_sharedsv_find(pTHX_ SV* sv); | |
21 | void Perl_sharedsv_thrcnt_inc(pTHX_ shared_sv* ssv); | |
22 | void Perl_sharedsv_thrcnt_dec(pTHX_ shared_sv* ssv); | |
23 | ||
24 | ||
25 | #define SHAREDSvGET(a) (a->sv) | |
667883b0 AB |
26 | #define SHAREDSvEDIT(a) { MUTEX_LOCK(&sharedsv_space_mutex);\ |
27 | SHAREDSvLOCK((a));\ | |
28 | PERL_SET_CONTEXT(sharedsv_space);\ | |
29 | } | |
30 | #define SHAREDSvRELEASE(a) { PERL_SET_CONTEXT((a)->owner);\ | |
31 | SHAREDSvUNLOCK((a));\ | |
32 | MUTEX_UNLOCK(&sharedsv_space_mutex);\ | |
33 | } | |
cd1ee231 JH |
34 | #define SHAREDSvLOCK(a) Perl_sharedsv_lock(aTHX_ a) |
35 | #define SHAREDSvUNLOCK(a) Perl_sharedsv_unlock(aTHX_ a) | |
36 | ||
37 | #endif /* USE_ITHREADS */ | |
38 |