From e611b132f9b8abe35b362e5870b74bce94a1e58e Mon Sep 17 00:00:00 2001 From: Adam Date: Sat, 16 May 2020 20:51:50 -0700 Subject: initial commit --- public/sdk/inc/dllsem.hxx | 214 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 214 insertions(+) create mode 100644 public/sdk/inc/dllsem.hxx (limited to 'public/sdk/inc/dllsem.hxx') diff --git a/public/sdk/inc/dllsem.hxx b/public/sdk/inc/dllsem.hxx new file mode 100644 index 000000000..7044309ea --- /dev/null +++ b/public/sdk/inc/dllsem.hxx @@ -0,0 +1,214 @@ + +///+--------------------------------------------------------------------------- +// +// File: DllSem.Hxx +// +// Contents: Semaphore classes +// +// Classes: CDLLStaticMutexSem - Mutex semaphore class For Dlls +// CDLLStaticLock - Safe Wrapper for lock... +// +// History: 11-Sep-92 Kurte Hacked up from AlexT's sources +// +// Notes: This file contains a hacked up version of the CMutexSem +// named CDllStataticMutexSem, which does not delete its +// critical section, when the DLL is unloaded, such that other +// dlls can still use the semaphore during their unload +// processing. This is to get around the NT less than +// optimal DLL Exit list processing... +// +//---------------------------------------------------------------------------- + +#ifndef __DLLSEM_HXX__ +#define __DLLSEM_HXX__ + +#include + + +//+--------------------------------------------------------------------------- +// +// Class: CDLLStaticMutexSem (dmxs) +// +// Purpose: Mutex Semaphore services +// +// Interface: Init - initializer (two-step) +// Request - acquire semaphore +// Release - release semaphore +// +// History: 14-Jun-91 AlexT Created. +// 30-oct-91 SethuR 32 bit implementation +// +// Notes: This class wraps a mutex semaphore. Mutex semaphores protect +// access to resources by only allowing one client through at a +// time. The client Requests the semaphore before accessing the +// resource and Releases the semaphore when it is done. The +// same client can Request the semaphore multiple times (a nest +// count is maintained). +// The mutex semaphore is a wrapper around a critical section +// which does not support a timeout mechanism. Therefore the +// usage of any value other than INFINITE is discouraged. It +// is provided merely for compatibility. +// +//---------------------------------------------------------------------------- + +class CDLLStaticMutexSem +{ +public: + CDLLStaticMutexSem(); + inline BOOL Init(); + ~CDLLStaticMutexSem(); + + SEMRESULT Request(DWORD dwMilliseconds = INFINITE); + void Release(); + +private: + CRITICAL_SECTION _cs; +}; + + +//+--------------------------------------------------------------------------- +// +// Class: CDLLStaticLock (dlck) +// +// Purpose: Lock using a Mutex Semaphore +// +// History: 02-Oct-91 BartoszM Created. +// +// Notes: Simple lock object to be created on the stack. +// The constructor acquires the semaphor, the destructor +// (called when lock is going out of scope) releases it. +// +//---------------------------------------------------------------------------- + +class CDLLStaticLock INHERIT_UNWIND_IF_CAIRO +{ + DECLARE_UNWIND + +public: + CDLLStaticLock ( CDLLStaticMutexSem& dmxs ); + ~CDLLStaticLock (); +private: + CDLLStaticMutexSem& _dmxs; +}; + + +//+--------------------------------------------------------------------------- +// +// Member: CDLLStaticMutexSem::CDLLStaticMutexSem, public +// +// Synopsis: Mutex semaphore constructor +// +// Effects: Initializes the semaphores data +// +// History: 14-Jun-91 AlexT Created. +// +//---------------------------------------------------------------------------- + +inline CDLLStaticMutexSem::CDLLStaticMutexSem() +{ + Init(); +} + +inline CDLLStaticMutexSem::Init() +{ + InitializeCriticalSection(&_cs); + return TRUE; +}; + +//+--------------------------------------------------------------------------- +// +// Member: CDLLStaticMutexSem::~CDLLStaticMutexSem, public +// +// Synopsis: Mutex semaphore destructor +// +// Effects: Releases semaphore data +// +// History: 14-Jun-91 AlexT Created. +// +//---------------------------------------------------------------------------- + +inline CDLLStaticMutexSem::~CDLLStaticMutexSem() +{ + // We can not delete the Critical Section as it may still + // Be called by someother DLL. +} + +//+--------------------------------------------------------------------------- +// +// Member: CDLLStaticMutexSem::Request, public +// +// Synopsis: Acquire semaphore +// +// Effects: Asserts correct owner +// +// Arguments: [dwMilliseconds] -- Timeout value +// +// History: 14-Jun-91 AlexT Created. +// +// Notes: Uses GetCurrentTask to establish the semaphore owner, but +// written to work even if GetCurrentTask fails. +// +//---------------------------------------------------------------------------- + +inline SEMRESULT CDLLStaticMutexSem::Request(DWORD dwMilliseconds) +{ + dwMilliseconds; + + EnterCriticalSection(&_cs); + return(SEMSUCCESS); +} + +//+--------------------------------------------------------------------------- +// +// Member: CDLLStaticMutexSem::Release, public +// +// Synopsis: Release semaphore +// +// Effects: Asserts correct owner +// +// History: 14-Jun-91 AlexT Created. +// +// Notes: Uses GetCurrentTask to establish the semaphore owner, but +// written to work even if GetCurrentTask fails. +// +//---------------------------------------------------------------------------- + +inline void CDLLStaticMutexSem::Release() +{ + LeaveCriticalSection(&_cs); +} + +//+--------------------------------------------------------------------------- +// +// Member: CDLLStaticLock::CDLLStaticLock +// +// Synopsis: Acquire semaphore +// +// History: 02-Oct-91 BartoszM Created. +// +//---------------------------------------------------------------------------- + +inline CDLLStaticLock::CDLLStaticLock ( CDLLStaticMutexSem& dmxs ) +: _dmxs ( dmxs ) +{ + _dmxs.Request ( INFINITE ); + END_CONSTRUCTION (CDLLStaticLock); +} + +//+--------------------------------------------------------------------------- +// +// Member: CDLLStaticLock::~CDLLStaticLock +// +// Synopsis: Release semaphore +// +// History: 02-Oct-91 BartoszM Created. +// +//---------------------------------------------------------------------------- + +inline CDLLStaticLock::~CDLLStaticLock () +{ + _dmxs.Release(); +} + + +#endif /* __DLLSEM_HXX__ */ -- cgit v1.2.3