Use std::recusive_mutex
This commit is contained in:
parent
2334c8dd9d
commit
a324333c11
@ -1,6 +1,5 @@
|
||||
|
||||
#include "Globals.h" // NOTE: MSVC stupidness requires this to be the same across all modules
|
||||
#include "IsThread.h"
|
||||
|
||||
|
||||
|
||||
@ -9,41 +8,12 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// cCriticalSection:
|
||||
|
||||
#ifdef _DEBUG
|
||||
cCriticalSection::cCriticalSection()
|
||||
{
|
||||
#ifdef _WIN32
|
||||
InitializeCriticalSection(&m_CriticalSection);
|
||||
#else
|
||||
pthread_mutexattr_init(&m_Attributes);
|
||||
pthread_mutexattr_settype(&m_Attributes, PTHREAD_MUTEX_RECURSIVE);
|
||||
|
||||
if (pthread_mutex_init(&m_CriticalSection, &m_Attributes) != 0)
|
||||
{
|
||||
LOGERROR("Could not initialize Critical Section!");
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef _DEBUG
|
||||
m_IsLocked = 0;
|
||||
#endif // _DEBUG
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
cCriticalSection::~cCriticalSection()
|
||||
{
|
||||
#ifdef _WIN32
|
||||
DeleteCriticalSection(&m_CriticalSection);
|
||||
#else
|
||||
if (pthread_mutex_destroy(&m_CriticalSection) != 0)
|
||||
{
|
||||
LOGWARNING("Could not destroy Critical Section!");
|
||||
}
|
||||
pthread_mutexattr_destroy(&m_Attributes);
|
||||
#endif
|
||||
m_IsLocked = 0;
|
||||
}
|
||||
#endif // _DEBUG
|
||||
|
||||
|
||||
|
||||
@ -51,11 +21,7 @@ cCriticalSection::~cCriticalSection()
|
||||
|
||||
void cCriticalSection::Lock()
|
||||
{
|
||||
#ifdef _WIN32
|
||||
EnterCriticalSection(&m_CriticalSection);
|
||||
#else
|
||||
pthread_mutex_lock(&m_CriticalSection);
|
||||
#endif
|
||||
m_Mutex.lock();
|
||||
|
||||
#ifdef _DEBUG
|
||||
m_IsLocked += 1;
|
||||
@ -74,11 +40,7 @@ void cCriticalSection::Unlock()
|
||||
m_IsLocked -= 1;
|
||||
#endif // _DEBUG
|
||||
|
||||
#ifdef _WIN32
|
||||
LeaveCriticalSection(&m_CriticalSection);
|
||||
#else
|
||||
pthread_mutex_unlock(&m_CriticalSection);
|
||||
#endif
|
||||
m_Mutex.unlock();
|
||||
}
|
||||
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
|
||||
#pragma once
|
||||
#include <mutex>
|
||||
|
||||
|
||||
|
||||
@ -8,8 +9,6 @@
|
||||
class cCriticalSection
|
||||
{
|
||||
public:
|
||||
cCriticalSection(void);
|
||||
~cCriticalSection();
|
||||
|
||||
void Lock(void);
|
||||
void Unlock(void);
|
||||
@ -17,6 +16,7 @@ public:
|
||||
// IsLocked/IsLockedByCurrentThread are only used in ASSERT statements, but because of the changes with ASSERT they must always be defined
|
||||
// The fake versions (in Release) will not effect the program in any way
|
||||
#ifdef _DEBUG
|
||||
cCriticalSection(void);
|
||||
bool IsLocked(void);
|
||||
bool IsLockedByCurrentThread(void);
|
||||
#else
|
||||
@ -30,12 +30,7 @@ private:
|
||||
std::thread::id m_OwningThreadID;
|
||||
#endif // _DEBUG
|
||||
|
||||
#ifdef _WIN32
|
||||
CRITICAL_SECTION m_CriticalSection;
|
||||
#else // _WIN32
|
||||
pthread_mutex_t m_CriticalSection;
|
||||
pthread_mutexattr_t m_Attributes;
|
||||
#endif // else _WIN32
|
||||
std::recursive_mutex m_Mutex;
|
||||
} ALIGN_8;
|
||||
|
||||
|
||||
|
@ -63,7 +63,7 @@ void cIsThread::Stop(void)
|
||||
|
||||
|
||||
bool cIsThread::Wait(void)
|
||||
{
|
||||
{
|
||||
#ifdef LOGD // ProtoProxy doesn't have LOGD
|
||||
LOGD("Waiting for thread %s to finish", m_ThreadName.c_str());
|
||||
#endif // LOGD
|
||||
|
Loading…
Reference in New Issue
Block a user