|
@@ -32,20 +32,24 @@
|
|
|
CLocalMutex::CLocalMutex(void) : m_bInit(false)
|
|
|
{
|
|
|
memset(&m_mutex, 0, sizeof(m_mutex));
|
|
|
+ memset(&m_mutexAttr, 0, sizeof(m_mutexAttr));
|
|
|
+ ::pthread_mutexattr_init(&m_mutexAttr);
|
|
|
+ ::pthread_mutexattr_settype(&m_mutexAttr, PTHREAD_MUTEX_RECURSIVE);
|
|
|
}
|
|
|
|
|
|
CLocalMutex::~CLocalMutex(void)
|
|
|
{
|
|
|
Release();
|
|
|
+ ::pthread_mutexattr_destroy(&m_mutexAttr);
|
|
|
}
|
|
|
|
|
|
-bool CLocalMutex::Create(void)
|
|
|
+bool CLocalMutex::Create(bool bRecursive)
|
|
|
{
|
|
|
if(!m_bInit)
|
|
|
{
|
|
|
- if(!::pthread_mutex_init(&m_mutex, NULL))
|
|
|
+ if(!::pthread_mutex_init(&m_mutex, bRecursive ? &m_mutexAttr : NULL))
|
|
|
{
|
|
|
- TRACE("CLocalMutex::Create: Created Mutex\n");
|
|
|
+ TRACE("CLocalMutex::Create: Created Mutex (recursive=%s)\n", bRecursive ? "true" : "false");
|
|
|
m_bInit = true;
|
|
|
}
|
|
|
else
|