summaryrefslogtreecommitdiff
path: root/cpp/src/IceUtil/RecMutex.cpp
diff options
context:
space:
mode:
authorMarc Laukien <marc@zeroc.com>2002-09-22 15:44:10 +0000
committerMarc Laukien <marc@zeroc.com>2002-09-22 15:44:10 +0000
commitf683ef370bcb987a9f96fc5da0793d71e3721d29 (patch)
treed0ef420f3cab12b8bab3563dbd71618adba704a3 /cpp/src/IceUtil/RecMutex.cpp
parentminor (diff)
downloadice-f683ef370bcb987a9f96fc5da0793d71e3721d29.tar.bz2
ice-f683ef370bcb987a9f96fc5da0793d71e3721d29.tar.xz
ice-f683ef370bcb987a9f96fc5da0793d71e3721d29.zip
thread fixes
Diffstat (limited to 'cpp/src/IceUtil/RecMutex.cpp')
-rw-r--r--cpp/src/IceUtil/RecMutex.cpp336
1 files changed, 168 insertions, 168 deletions
diff --git a/cpp/src/IceUtil/RecMutex.cpp b/cpp/src/IceUtil/RecMutex.cpp
index 89c11b020d9..2f617b2d51d 100644
--- a/cpp/src/IceUtil/RecMutex.cpp
+++ b/cpp/src/IceUtil/RecMutex.cpp
@@ -1,168 +1,168 @@
-// **********************************************************************
-//
-// Copyright (c) 2001
-// Mutable Realms, Inc.
-// Huntsville, AL, USA
-//
-// All Rights Reserved
-//
-// **********************************************************************
-
-#include <IceUtil/RecMutex.h>
-#include <IceUtil/Exception.h>
-
-using namespace std;
-
-#ifdef _WIN32
-
-IceUtil::RecMutex::RecMutex() :
- _count(0)
-{
- InitializeCriticalSection(&_mutex);
-}
-
-IceUtil::RecMutex::~RecMutex()
-{
- assert(_count == 0);
- DeleteCriticalSection(&_mutex);
-}
-
-bool
-IceUtil::RecMutex::lock() const
-{
- EnterCriticalSection(&_mutex);
- if(++_count > 1)
- {
- LeaveCriticalSection(&_mutex);
- return false;
- }
- return true;
-}
-
-bool
-IceUtil::RecMutex::trylock() const
-{
- if(!TryEnterCriticalSection(&_mutex))
- {
- throw LockedException(__FILE__, __LINE__);
- }
- if(++_count > 1)
- {
- LeaveCriticalSection(&_mutex);
- return false;
- }
- return true;
-}
-
-bool
-IceUtil::RecMutex::unlock() const
-{
- if(--_count == 0)
- {
- LeaveCriticalSection(&_mutex);
- return true;
- }
- return false;
-}
-
-void
-IceUtil::RecMutex::unlock(LockState& state) const
-{
- state.count = _count;
- _count = 0;
- LeaveCriticalSection(&_mutex);
-}
-
-void
-IceUtil::RecMutex::lock(LockState& state) const
-{
- EnterCriticalSection(&_mutex);
- _count = state.count;
-}
-#else
-
-IceUtil::RecMutex::RecMutex() :
- _count(0)
-{
- const pthread_mutexattr_t attr = { PTHREAD_MUTEX_RECURSIVE_NP };
- int rc = pthread_mutex_init(&_mutex, &attr);
- if(rc != 0)
- {
- throw SyscallException(strerror(rc), __FILE__, __LINE__);
- }
-}
-
-IceUtil::RecMutex::~RecMutex()
-{
- assert(_count == 0);
- int rc = 0;
- rc = pthread_mutex_destroy(&_mutex);
- assert(rc == 0);
-}
-
-bool
-IceUtil::RecMutex::lock() const
-{
- int rc = pthread_mutex_lock(&_mutex);
- if(rc != 0)
- {
- throw SyscallException(strerror(rc), __FILE__, __LINE__);
- }
- if(++_count > 1)
- {
- rc = pthread_mutex_unlock(&_mutex);
- assert(rc == 0);
- return false;
- }
- return true;
-}
-
-bool
-IceUtil::RecMutex::trylock() const
-{
- int rc = pthread_mutex_trylock(&_mutex);
- if(rc != 0)
- {
- if(rc == EBUSY)
- {
- throw LockedException(__FILE__, __LINE__);
- }
- throw SyscallException(strerror(rc), __FILE__, __LINE__);
- }
- if(++_count > 1)
- {
- rc = pthread_mutex_unlock(&_mutex);
- assert(rc == 0);
- return false;
- }
- return true;
-}
-
-bool
-IceUtil::RecMutex::unlock() const
-{
- if(--_count == 0)
- {
- int rc = 0; // Prevent warnings when NDEBUG is defined.
- rc = pthread_mutex_unlock(&_mutex);
- assert(rc == 0);
- return true;
- }
- return false;
-}
-
-void
-IceUtil::RecMutex::unlock(LockState& state) const
-{
- state.mutex = &_mutex;
- state.count = _count;
- _count = 0;
-}
-
-void
-IceUtil::RecMutex::lock(LockState& state) const
-{
- _count = state.count;
-}
-
-#endif
+// **********************************************************************
+//
+// Copyright (c) 2001
+// Mutable Realms, Inc.
+// Huntsville, AL, USA
+//
+// All Rights Reserved
+//
+// **********************************************************************
+
+#include <IceUtil/RecMutex.h>
+#include <IceUtil/Exception.h>
+
+using namespace std;
+
+#ifdef _WIN32
+
+IceUtil::RecMutex::RecMutex() :
+ _count(0)
+{
+ InitializeCriticalSection(&_mutex);
+}
+
+IceUtil::RecMutex::~RecMutex()
+{
+ assert(_count == 0);
+ DeleteCriticalSection(&_mutex);
+}
+
+bool
+IceUtil::RecMutex::lock() const
+{
+ EnterCriticalSection(&_mutex);
+ if(++_count > 1)
+ {
+ LeaveCriticalSection(&_mutex);
+ return false;
+ }
+ return true;
+}
+
+bool
+IceUtil::RecMutex::trylock() const
+{
+ if(!TryEnterCriticalSection(&_mutex))
+ {
+ throw ThreadLockedException(__FILE__, __LINE__);
+ }
+ if(++_count > 1)
+ {
+ LeaveCriticalSection(&_mutex);
+ return false;
+ }
+ return true;
+}
+
+bool
+IceUtil::RecMutex::unlock() const
+{
+ if(--_count == 0)
+ {
+ LeaveCriticalSection(&_mutex);
+ return true;
+ }
+ return false;
+}
+
+void
+IceUtil::RecMutex::unlock(LockState& state) const
+{
+ state.count = _count;
+ _count = 0;
+ LeaveCriticalSection(&_mutex);
+}
+
+void
+IceUtil::RecMutex::lock(LockState& state) const
+{
+ EnterCriticalSection(&_mutex);
+ _count = state.count;
+}
+#else
+
+IceUtil::RecMutex::RecMutex() :
+ _count(0)
+{
+ const pthread_mutexattr_t attr = { PTHREAD_MUTEX_RECURSIVE_NP };
+ int rc = pthread_mutex_init(&_mutex, &attr);
+ if(rc != 0)
+ {
+ throw ThreadSyscallException(strerror(rc), __FILE__, __LINE__);
+ }
+}
+
+IceUtil::RecMutex::~RecMutex()
+{
+ assert(_count == 0);
+ int rc = 0;
+ rc = pthread_mutex_destroy(&_mutex);
+ assert(rc == 0);
+}
+
+bool
+IceUtil::RecMutex::lock() const
+{
+ int rc = pthread_mutex_lock(&_mutex);
+ if(rc != 0)
+ {
+ throw ThreadSyscallException(strerror(rc), __FILE__, __LINE__);
+ }
+ if(++_count > 1)
+ {
+ rc = pthread_mutex_unlock(&_mutex);
+ assert(rc == 0);
+ return false;
+ }
+ return true;
+}
+
+bool
+IceUtil::RecMutex::trylock() const
+{
+ int rc = pthread_mutex_trylock(&_mutex);
+ if(rc != 0)
+ {
+ if(rc == EBUSY)
+ {
+ throw ThreadLockedException(__FILE__, __LINE__);
+ }
+ throw ThreadSyscallException(strerror(rc), __FILE__, __LINE__);
+ }
+ if(++_count > 1)
+ {
+ rc = pthread_mutex_unlock(&_mutex);
+ assert(rc == 0);
+ return false;
+ }
+ return true;
+}
+
+bool
+IceUtil::RecMutex::unlock() const
+{
+ if(--_count == 0)
+ {
+ int rc = 0; // Prevent warnings when NDEBUG is defined.
+ rc = pthread_mutex_unlock(&_mutex);
+ assert(rc == 0);
+ return true;
+ }
+ return false;
+}
+
+void
+IceUtil::RecMutex::unlock(LockState& state) const
+{
+ state.mutex = &_mutex;
+ state.count = _count;
+ _count = 0;
+}
+
+void
+IceUtil::RecMutex::lock(LockState& state) const
+{
+ _count = state.count;
+}
+
+#endif