summaryrefslogtreecommitdiffstats
path: root/contrib/perl5/XSlock.h
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/perl5/XSlock.h')
-rw-r--r--contrib/perl5/XSlock.h21
1 files changed, 12 insertions, 9 deletions
diff --git a/contrib/perl5/XSlock.h b/contrib/perl5/XSlock.h
index 8fb0ce4..0b2c829 100644
--- a/contrib/perl5/XSlock.h
+++ b/contrib/perl5/XSlock.h
@@ -13,23 +13,26 @@ protected:
};
XSLockManager g_XSLock;
+CPerlObj* pPerl;
class XSLock
{
public:
- XSLock() { g_XSLock.Enter(); };
+ XSLock(CPerlObj *p) {
+ g_XSLock.Enter();
+ ::pPerl = p;
+ };
~XSLock() { g_XSLock.Leave(); };
};
-CPerlObj* pPerl;
-
+/* PERL_CAPI does its own locking in xs_handler() */
+#if defined(PERL_OBJECT) && !defined(PERL_CAPI)
#undef dXSARGS
#define dXSARGS \
- dSP; dMARK; \
- I32 ax = mark - PL_stack_base + 1; \
- I32 items = sp - mark; \
- XSLock localLock; \
- ::pPerl = pPerl
-
+ XSLock localLock(pPerl); \
+ dSP; dMARK; \
+ I32 ax = mark - PL_stack_base + 1; \
+ I32 items = sp - mark
+#endif /* PERL_OBJECT && !PERL_CAPI */
#endif
OpenPOWER on IntegriCloud