simplify (handle recursive locking in RageMutex)

This commit is contained in:
Glenn Maynard
2004-06-11 19:08:56 +00:00
parent 0c7f5e113d
commit 4c14fb3943
5 changed files with 0 additions and 55 deletions
-4
View File
@@ -49,10 +49,6 @@ public:
/* Unlock the mutex. This must only be called when the mutex is locked; implementations
* may fail with an assertion if the mutex is not locked. */
virtual void Unlock() = 0;
/* Return the thread ID of the thread that has this mutex locked. If no thread
* holds the mutex, return GetInvalidThreadId. */
virtual uint64_t GetLockedByThreadId() const = 0;
};
/* These functions must be implemented by the thread implementation. */
@@ -114,8 +114,6 @@ MutexImpl_Pthreads::MutexImpl_Pthreads( RageMutex *pParent ):
MutexImpl( pParent )
{
pthread_mutex_init( &mutex, NULL );
LockedBy = GetInvalidThreadId();
LockCnt = 0;
}
MutexImpl_Pthreads::~MutexImpl_Pthreads()
@@ -128,12 +126,6 @@ MutexImpl_Pthreads::~MutexImpl_Pthreads()
bool MutexImpl_Pthreads::Lock()
{
if( LockedBy == (uint64_t) GetThisThreadId() )
{
++LockCnt;
return true;
}
#if defined(HAVE_PTHREAD_MUTEX_TIMEDLOCK) && defined(CRASH_HANDLER)
int len = 10; /* seconds */
int tries = 2;
@@ -151,7 +143,6 @@ bool MutexImpl_Pthreads::Lock()
switch( ret )
{
case 0:
LockedBy = GetCurrentThreadId();
return true;
case ETIMEDOUT:
@@ -171,7 +162,6 @@ bool MutexImpl_Pthreads::Lock()
int ret = pthread_mutex_lock( &mutex );
if( ret )
RageException::Throw( "pthread_mutex_lock failed: %s", strerror(ret) );
LockedBy = GetThisThreadId();
return true;
#endif
}
@@ -179,21 +169,9 @@ bool MutexImpl_Pthreads::Lock()
void MutexImpl_Pthreads::Unlock()
{
if( LockCnt )
{
--LockCnt;
return;
}
LockedBy = GetInvalidThreadId();
pthread_mutex_unlock( &mutex );
}
uint64_t MutexImpl_Pthreads::GetLockedByThreadId() const
{
return LockedBy;
}
uint64_t GetThisThreadId()
{
#if defined(PID_BASED_THREADS)
@@ -38,9 +38,6 @@ public:
struct MutexImpl_Pthreads: public MutexImpl
{
uint64_t LockedBy;
volatile int LockCnt;
pthread_mutex_t mutex;
MutexImpl_Pthreads( RageMutex *parent );
@@ -48,7 +45,6 @@ struct MutexImpl_Pthreads: public MutexImpl
bool Lock();
void Unlock();
uint64_t GetLockedByThreadId() const;
};
#endif
@@ -87,8 +87,6 @@ MutexImpl_Win32::MutexImpl_Win32( RageMutex *pParent ):
{
mutex = CreateMutex( NULL, false, NULL );
ASSERT_M( mutex != NULL, werr_ssprintf(GetLastError(), "CreateMutex") );
LockedBy = GetInvalidThreadId();
LockCnt = 0;
}
MutexImpl_Win32::~MutexImpl_Win32()
@@ -98,12 +96,6 @@ MutexImpl_Win32::~MutexImpl_Win32()
bool MutexImpl_Win32::Lock()
{
if( LockedBy == GetCurrentThreadId() )
{
++LockCnt;
return true;
}
int len = 15000;
int tries = 2;
@@ -120,7 +112,6 @@ bool MutexImpl_Win32::Lock()
break;
case WAIT_OBJECT_0:
LockedBy = GetCurrentThreadId();
return true;
case WAIT_TIMEOUT:
@@ -140,13 +131,6 @@ bool MutexImpl_Win32::Lock()
void MutexImpl_Win32::Unlock()
{
if( LockCnt )
{
--LockCnt;
return;
}
LockedBy = GetInvalidThreadId();
const bool ret = !!ReleaseMutex( mutex );
/* We can't ASSERT here, since this is called from checkpoints, which is
@@ -155,11 +139,6 @@ void MutexImpl_Win32::Unlock()
sm_crash( werr_ssprintf( GetLastError(), "ReleaseMutex failed" ) );
}
uint64_t MutexImpl_Win32::GetLockedByThreadId() const
{
return LockedBy;
}
uint64_t GetThisThreadId()
{
return GetCurrentThreadId();
@@ -22,9 +22,6 @@ public:
struct MutexImpl_Win32: public MutexImpl
{
uint64_t LockedBy;
volatile int LockCnt;
HANDLE mutex;
MutexImpl_Win32( RageMutex *parent );
@@ -32,7 +29,6 @@ struct MutexImpl_Win32: public MutexImpl
bool Lock();
void Unlock();
uint64_t GetLockedByThreadId() const;
};
#endif