summaryrefslogtreecommitdiff
path: root/cpp/src/IceUtil/Cond.cpp
diff options
context:
space:
mode:
authorMatthew Newhook <matthew@zeroc.com>2002-02-12 17:12:29 +0000
committerMatthew Newhook <matthew@zeroc.com>2002-02-12 17:12:29 +0000
commit4a9851b86fc52af5b629bf06d7a83d29da15d98f (patch)
treec38cd4704a983377274bafeb70f2eebc68aba600 /cpp/src/IceUtil/Cond.cpp
parentadding IceXML (diff)
downloadice-4a9851b86fc52af5b629bf06d7a83d29da15d98f.tar.bz2
ice-4a9851b86fc52af5b629bf06d7a83d29da15d98f.tar.xz
ice-4a9851b86fc52af5b629bf06d7a83d29da15d98f.zip
Fix some TODO's in IceUtil. IceStorm now uses the new Logger utils.
Diffstat (limited to 'cpp/src/IceUtil/Cond.cpp')
-rw-r--r--cpp/src/IceUtil/Cond.cpp82
1 files changed, 82 insertions, 0 deletions
diff --git a/cpp/src/IceUtil/Cond.cpp b/cpp/src/IceUtil/Cond.cpp
index 807295d2441..9487e590931 100644
--- a/cpp/src/IceUtil/Cond.cpp
+++ b/cpp/src/IceUtil/Cond.cpp
@@ -80,6 +80,88 @@ IceUtil::Cond::broadcast()
}
void
+IceUtil::Cond::waitImpl(const RecMutex& mutex) const
+{
+ preWait();
+
+ RecMutex::LockState state;
+ mutex.unlock(state);
+
+ try
+ {
+ dowait(-1);
+ mutex.lock(state);
+ }
+ catch(...)
+ {
+ mutex.lock(state);
+ throw;
+ }
+}
+
+void
+IceUtil::Cond::waitImpl(const Mutex& mutex) const
+{
+ preWait();
+
+ Mutex::LockState state;
+ mutex.unlock(state);
+
+ try
+ {
+ dowait(-1);
+ mutex.lock(state);
+ }
+ catch(...)
+ {
+ mutex.lock(state);
+ throw;
+ }
+}
+
+bool
+IceUtil::Cond::timedwaitImpl(const RecMutex& mutex, long msec) const
+{
+ preWait();
+
+ RecMutex::LockState state;
+ mutex.unlock(state);
+
+ try
+ {
+ bool rc = dowait(msec);
+ mutex.lock(state);
+ return rc;
+ }
+ catch(...)
+ {
+ mutex.lock(state);
+ throw;
+ }
+}
+
+bool
+IceUtil::Cond::timedwaitImpl(const Mutex& mutex, long msec) const
+{
+ preWait();
+
+ Mutex::LockState state;
+ mutex.unlock(state);
+
+ try
+ {
+ bool rc = dowait(msec);
+ mutex.lock(state);
+ return rc;
+ }
+ catch(...)
+ {
+ mutex.lock(state);
+ throw;
+ }
+}
+
+void
IceUtil::Cond::wake(bool broadcast)
{
//