ensure XS_LOCKS stuff happens *before* XSUB is entered under
authorGurusamy Sarathy <gsar@cpan.org>
Sun, 28 Mar 1999 07:26:33 +0000 (07:26 +0000)
committerGurusamy Sarathy <gsar@cpan.org>
Sun, 28 Mar 1999 07:26:33 +0000 (07:26 +0000)
-DPERL_CAPI

p4raw-id: //depot/maint-5.005/perl@3186

XSlock.h
win32/GenCAPI.pl
win32/Makefile
win32/makefile.mk

index 8fb0ce4..0b2c829 100644 (file)
--- a/XSlock.h
+++ b/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
index 2ec2809..e1633e9 100644 (file)
@@ -595,6 +595,9 @@ U32 *       _Perl_opargs(void)
 
 void xs_handler(CV* cv, CPerlObj* p)
 {
+#ifndef NO_XSLOCKS
+    XSLock localLock(p);
+#endif
     void(*func)(CV*);
     SV* sv;
     MAGIC* m = pPerl->Perl_mg_find((SV*)cv, '~');
index cc6c6de..fb91efb 100644 (file)
@@ -952,7 +952,7 @@ clean :
        -@erase $(WIN32_OBJ)
        -@erase $(DLL_OBJ)
        -@erase $(X2P_OBJ)
-       -@erase ..\*$(o) ..\*.lib ..\*.exp *$(o) *.lib *.exp
+       -@erase ..\*$(o) ..\*.lib ..\*.exp ..\*.res *$(o) *.lib *.exp *.res
        -@erase ..\t\*.exe ..\t\*.dll ..\t\*.bat
        -@erase ..\x2p\*.exe ..\x2p\*.bat
        -@erase *.ilk
index 1287433..244b2c9 100644 (file)
@@ -1114,7 +1114,7 @@ clean :
        -@erase $(WIN32_OBJ)
        -@erase $(DLL_OBJ)
        -@erase $(X2P_OBJ)
-       -@erase ..\*$(o) ..\*$(a) ..\*.exp *$(o) *$(a) *.exp
+       -@erase ..\*$(o) ..\*$(a) ..\*.exp ..\*.res *$(o) *$(a) *.exp *.res
        -@erase ..\t\*.exe ..\t\*.dll ..\t\*.bat
        -@erase ..\x2p\*.exe ..\x2p\*.bat
        -@erase *.ilk