Commit | Line | Data |
cd1ee231 |
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 |
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 |
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 |
34 | #define SHAREDSvLOCK(a) Perl_sharedsv_lock(aTHX_ a) |
35 | #define SHAREDSvUNLOCK(a) Perl_sharedsv_unlock(aTHX_ a) |
36 | |
37 | #endif /* USE_ITHREADS */ |
38 | |