diff options
Diffstat (limited to 'source')
-rw-r--r-- | source/cCriticalSection.cpp | 48 | ||||
-rw-r--r-- | source/cCriticalSection.h | 11 |
2 files changed, 48 insertions, 11 deletions
diff --git a/source/cCriticalSection.cpp b/source/cCriticalSection.cpp index e8d719a45..3da12ebf4 100644 --- a/source/cCriticalSection.cpp +++ b/source/cCriticalSection.cpp @@ -1,5 +1,6 @@ #include "Globals.h" // NOTE: MSVC stupidness requires this to be the same across all modules +#include "cIsThread.h" @@ -50,11 +51,16 @@ cCriticalSection::~cCriticalSection() void cCriticalSection::Lock() { -#ifdef _WIN32 - EnterCriticalSection( &m_CriticalSection ); -#else - pthread_mutex_lock( (pthread_mutex_t*)m_CriticalSectionPtr ); -#endif + #ifdef _WIN32 + EnterCriticalSection( &m_CriticalSection ); + #else + pthread_mutex_lock( (pthread_mutex_t*)m_CriticalSectionPtr ); + #endif + + #ifdef _DEBUG + m_IsLocked = true; + m_OwningThreadID = cIsThread::GetCurrentID(); + #endif // _DEBUG } @@ -63,11 +69,33 @@ void cCriticalSection::Lock() void cCriticalSection::Unlock() { -#ifdef _WIN32 - LeaveCriticalSection( &m_CriticalSection ); -#else - pthread_mutex_unlock( (pthread_mutex_t*)m_CriticalSectionPtr ); -#endif + #ifdef _DEBUG + m_IsLocked = false; + #endif // _DEBUG + + #ifdef _WIN32 + LeaveCriticalSection( &m_CriticalSection ); + #else + pthread_mutex_unlock( (pthread_mutex_t*)m_CriticalSectionPtr ); + #endif +} + + + + + +bool cCriticalSection::IsLocked(void) +{ + return m_IsLocked; +} + + + + + +bool cCriticalSection::IsLockedByCurrentThread(void) +{ + return m_IsLocked && (m_OwningThreadID == cIsThread::GetCurrentID()); } diff --git a/source/cCriticalSection.h b/source/cCriticalSection.h index a8b475503..9852a2e6c 100644 --- a/source/cCriticalSection.h +++ b/source/cCriticalSection.h @@ -14,8 +14,17 @@ public: void Lock(void); void Unlock(void); + #ifdef _DEBUG + bool IsLocked(void); + bool IsLockedByCurrentThread(void); + #endif // _DEBUG + private: - + #ifdef _DEBUG + bool m_IsLocked; + unsigned long m_OwningThreadID; + #endif // _DEBUG + #ifdef _WIN32 CRITICAL_SECTION m_CriticalSection; #else // _WIN32 |