home *** CD-ROM | disk | FTP | other *** search
/ Chip: Windows 2000 Professional Resource Kit / W2KPRK.iso / apps / perl / ActivePerl.exe / data.z / XSlock.h < prev    next >
Encoding:
C/C++ Source or Header  |  1999-10-14  |  816 b   |  39 lines

  1. #ifndef __XSlock_h__
  2. #define __XSlock_h__
  3.  
  4. class XSLockManager
  5. {
  6. public:
  7.     XSLockManager() { InitializeCriticalSection(&cs); };
  8.     ~XSLockManager() { DeleteCriticalSection(&cs); };
  9.     void Enter(void) { EnterCriticalSection(&cs); };
  10.     void Leave(void) { LeaveCriticalSection(&cs); };
  11. protected:
  12.     CRITICAL_SECTION cs;
  13. };
  14.  
  15. XSLockManager g_XSLock;
  16. CPerlObj* pPerl;
  17.  
  18. class XSLock
  19. {
  20. public:
  21.     XSLock(CPerlObj *p) {
  22.         g_XSLock.Enter();
  23.         ::pPerl = p;
  24.     };
  25.     ~XSLock() { g_XSLock.Leave(); };
  26. };
  27.  
  28. /* PERL_CAPI does its own locking in xs_handler() */
  29. #if defined(PERL_OBJECT) && !defined(PERL_CAPI)
  30. #undef dXSARGS
  31. #define dXSARGS    \
  32.     XSLock localLock(pPerl);            \
  33.     dSP; dMARK;                    \
  34.     I32 ax = mark - PL_stack_base + 1;        \
  35.     I32 items = sp - mark
  36. #endif    /* PERL_OBJECT && !PERL_CAPI */
  37.  
  38. #endif
  39.