This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
[patch] peep() is rude
[perl5.git] / sharedsv.h
1 #ifdef USE_ITHREADS
2
3 typedef struct {
4     SV                 *sv;             /* The actual SV */
5     perl_mutex          mutex;          /* Our mutex */
6     perl_cond           cond;           /* Our condition variable */
7     perl_cond           user_cond;      /* For user-level conditions */
8     IV                  locks;          /* Number of locks held */
9     PerlInterpreter    *owner;          /* Who owns the lock? */
10     U16                 index;          /* Update index */
11 } shared_sv;
12
13 #define SHAREDSvGET(a)      (a->sv)
14 #define SHAREDSvLOCK(a)     Perl_sharedsv_lock(aTHX_ a)
15 #define SHAREDSvUNLOCK(a)   Perl_sharedsv_unlock(aTHX_ a)
16
17 #define SHAREDSvEDIT(a)     STMT_START {                                \
18                                 MUTEX_LOCK(&PL_sharedsv_space_mutex);   \
19                                 SHAREDSvLOCK((a));                      \
20                                 PERL_SET_CONTEXT(PL_sharedsv_space);    \
21                             } STMT_END
22
23 #define SHAREDSvRELEASE(a)  STMT_START {                                \
24                                 PERL_SET_CONTEXT((a)->owner);           \
25                                 SHAREDSvUNLOCK((a));                    \
26                                 MUTEX_UNLOCK(&PL_sharedsv_space_mutex); \
27                             } STMT_END
28
29 #endif /* USE_ITHREADS */