|
From: <axl...@us...> - 2010-01-15 23:15:30
|
Revision: 665
http://hgengine.svn.sourceforge.net/hgengine/?rev=665&view=rev
Author: axlecrusher
Date: 2010-01-15 23:15:24 +0000 (Fri, 15 Jan 2010)
Log Message:
-----------
updates for linux
Modified Paths:
--------------
Mercury2/src/MercuryThreads.cpp
Mercury2/src/ModuleManager.cpp
Modified: Mercury2/src/MercuryThreads.cpp
===================================================================
--- Mercury2/src/MercuryThreads.cpp 2010-01-15 21:55:57 UTC (rev 664)
+++ Mercury2/src/MercuryThreads.cpp 2010-01-15 23:15:24 UTC (rev 665)
@@ -2,6 +2,8 @@
#if defined( WIN32 )
#include <windows.h>
+#else
+#include <errno.h>
#endif
//XXX WARNING in windows mutex of the same name are shared!!!
@@ -185,7 +187,19 @@
// if (pthread_mutex_trylock( &m_mutex ) != 0)
// {
// printf("%s waiting\n", m_name.c_str());
- pthread_mutex_lock( &m_mutex );
+ r = pthread_mutex_lock( &m_mutex );
+ switch (r)
+ {
+ case EBUSY:
+ fprintf(stderr, "Mutex held by thread ID 0x%x failed (%d locks)\n", m_heldBy, iLockCount );
+ return false;
+ case EINVAL:
+ fprintf(stderr, "Invalid Mutex\n");
+ return true;
+ case EAGAIN:
+ fprintf(stderr, "Max Recursive Locks Reached\n");
+ return false;
+ }
// printf("%s locked\n", m_name.c_str());
// }
#endif
@@ -201,14 +215,16 @@
// printf("Unlocked %s\n", m_name.c_str());
--iLockCount;
if (iLockCount==0) m_heldBy = 0;
+
+ int r, error;
#if defined( WIN32 )
- bool r = ReleaseMutex( m_mutex )!=0;
- if (!r) fprintf(stderr, "Failed to release mutex %s, error %d!!\n", m_name.c_str(), GetLastError());
- return r;
+ r = ReleaseMutex( m_mutex );
+ if (r!=0) error = GetLastError();
#else
- pthread_mutex_unlock( &m_mutex );
- return true;
+ error = r = pthread_mutex_unlock( &m_mutex );
#endif
+ if (r!=0) fprintf(stderr, "Failed to release mutex %s, error %d!!\n", m_name.c_str(), error);
+ return r!=0;
}
int MercuryMutex::Open( )
Modified: Mercury2/src/ModuleManager.cpp
===================================================================
--- Mercury2/src/ModuleManager.cpp 2010-01-15 21:55:57 UTC (rev 664)
+++ Mercury2/src/ModuleManager.cpp 2010-01-15 23:15:24 UTC (rev 665)
@@ -120,7 +120,7 @@
void ModuleManager::ReloadModule( const MString & sClass )
{
- m_mHandleMutex.Wait();
+ AutoMutexLock lock(m_mHandleMutex);
std::set< void * > & s = m_hAllInstances[sClass];
std::set< void * >::iterator i = s.begin();
@@ -129,8 +129,6 @@
for( ; i != s.end(); i++ )
*((void**)(*i)) = newvtable;
-
- m_mHandleMutex.UnLock();
}
void ModuleManager::RegisterInstance( void * instance, const char * sClass )
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|