summaryrefslogtreecommitdiff
path: root/cpp
diff options
context:
space:
mode:
authorJose <jose@zeroc.com>2009-12-16 23:24:32 +0100
committerJose <jose@zeroc.com>2009-12-16 23:24:32 +0100
commit2d9c9295db9dabf20e860755e59229c01e18363b (patch)
tree531454063b912e6c3a4ea2c2089b495f73396b45 /cpp
parentbug 4492 - PHP demos don't build against RPMs (diff)
downloadice-2d9c9295db9dabf20e860755e59229c01e18363b.tar.bz2
ice-2d9c9295db9dabf20e860755e59229c01e18363b.tar.xz
ice-2d9c9295db9dabf20e860755e59229c01e18363b.zip
Remove StaticMutexTest & RWRecMutexTest
Diffstat (limited to 'cpp')
-rw-r--r--cpp/test/IceUtil/thread/.depend4
-rw-r--r--cpp/test/IceUtil/thread/Makefile2
-rw-r--r--cpp/test/IceUtil/thread/Makefile.mak2
-rw-r--r--cpp/test/IceUtil/thread/RWRecMutexTest.cpp885
-rw-r--r--cpp/test/IceUtil/thread/RWRecMutexTest.h26
-rw-r--r--cpp/test/IceUtil/thread/StaticMutexTest.cpp153
-rw-r--r--cpp/test/IceUtil/thread/StaticMutexTest.h26
-rw-r--r--cpp/test/IceUtil/thread/TestSuite.cpp4
8 files changed, 1 insertions, 1101 deletions
diff --git a/cpp/test/IceUtil/thread/.depend b/cpp/test/IceUtil/thread/.depend
index 0092432bb86..4aac50b2a43 100644
--- a/cpp/test/IceUtil/thread/.depend
+++ b/cpp/test/IceUtil/thread/.depend
@@ -2,12 +2,10 @@ TestBase$(OBJEXT): TestBase.cpp $(includedir)/IceUtil/IceUtil.h $(includedir)/Ic
CreateTest$(OBJEXT): CreateTest.cpp $(includedir)/IceUtil/DisableWarnings.h $(includedir)/IceUtil/IceUtil.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/AbstractMutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/Cache.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/IceUtil/CountDownLatch.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/CtrlCHandler.h $(includedir)/IceUtil/Functional.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/MutexPtrLock.h $(includedir)/IceUtil/RWRecMutex.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/RecMutex.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/UUID.h $(includedir)/IceUtil/Unicode.h CreateTest.h TestBase.h ../../include/TestCommon.h
AliveTest$(OBJEXT): AliveTest.cpp $(includedir)/IceUtil/IceUtil.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/AbstractMutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/Cache.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/IceUtil/CountDownLatch.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/CtrlCHandler.h $(includedir)/IceUtil/Functional.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/MutexPtrLock.h $(includedir)/IceUtil/RWRecMutex.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/RecMutex.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/UUID.h $(includedir)/IceUtil/Unicode.h AliveTest.h TestBase.h ../../include/TestCommon.h
StartTest$(OBJEXT): StartTest.cpp $(includedir)/IceUtil/IceUtil.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/AbstractMutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/Cache.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/IceUtil/CountDownLatch.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/CtrlCHandler.h $(includedir)/IceUtil/Functional.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/MutexPtrLock.h $(includedir)/IceUtil/RWRecMutex.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/RecMutex.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/UUID.h $(includedir)/IceUtil/Unicode.h StartTest.h TestBase.h ../../include/TestCommon.h
-RWRecMutexTest$(OBJEXT): RWRecMutexTest.cpp $(includedir)/IceUtil/IceUtil.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/AbstractMutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/Cache.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/IceUtil/CountDownLatch.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/CtrlCHandler.h $(includedir)/IceUtil/Functional.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/MutexPtrLock.h $(includedir)/IceUtil/RWRecMutex.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/RecMutex.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/UUID.h $(includedir)/IceUtil/Unicode.h RWRecMutexTest.h TestBase.h ../../include/TestCommon.h
RecMutexTest$(OBJEXT): RecMutexTest.cpp $(includedir)/IceUtil/IceUtil.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/AbstractMutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/Cache.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/IceUtil/CountDownLatch.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/CtrlCHandler.h $(includedir)/IceUtil/Functional.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/MutexPtrLock.h $(includedir)/IceUtil/RWRecMutex.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/RecMutex.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/UUID.h $(includedir)/IceUtil/Unicode.h RecMutexTest.h TestBase.h ../../include/TestCommon.h
-StaticMutexTest$(OBJEXT): StaticMutexTest.cpp $(includedir)/IceUtil/IceUtil.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/AbstractMutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/Cache.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/IceUtil/CountDownLatch.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/CtrlCHandler.h $(includedir)/IceUtil/Functional.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/MutexPtrLock.h $(includedir)/IceUtil/RWRecMutex.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/RecMutex.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/UUID.h $(includedir)/IceUtil/Unicode.h StaticMutexTest.h TestBase.h ../../include/TestCommon.h
MutexTest$(OBJEXT): MutexTest.cpp $(includedir)/IceUtil/IceUtil.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/AbstractMutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/Cache.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/IceUtil/CountDownLatch.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/CtrlCHandler.h $(includedir)/IceUtil/Functional.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/MutexPtrLock.h $(includedir)/IceUtil/RWRecMutex.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/RecMutex.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/UUID.h $(includedir)/IceUtil/Unicode.h MutexTest.h TestBase.h ../../include/TestCommon.h
MonitorMutexTest$(OBJEXT): MonitorMutexTest.cpp $(includedir)/IceUtil/IceUtil.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/AbstractMutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/Cache.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/IceUtil/CountDownLatch.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/CtrlCHandler.h $(includedir)/IceUtil/Functional.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/MutexPtrLock.h $(includedir)/IceUtil/RWRecMutex.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/RecMutex.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/UUID.h $(includedir)/IceUtil/Unicode.h MonitorMutexTest.h TestBase.h ../../include/TestCommon.h
MonitorRecMutexTest$(OBJEXT): MonitorRecMutexTest.cpp $(includedir)/IceUtil/IceUtil.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/AbstractMutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/Cache.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/IceUtil/CountDownLatch.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/CtrlCHandler.h $(includedir)/IceUtil/Functional.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/MutexPtrLock.h $(includedir)/IceUtil/RWRecMutex.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/RecMutex.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/UUID.h $(includedir)/IceUtil/Unicode.h MonitorRecMutexTest.h TestBase.h ../../include/TestCommon.h
CountDownLatchTest$(OBJEXT): CountDownLatchTest.cpp $(includedir)/IceUtil/IceUtil.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/AbstractMutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/Cache.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/IceUtil/CountDownLatch.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/CtrlCHandler.h $(includedir)/IceUtil/Functional.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/MutexPtrLock.h $(includedir)/IceUtil/RWRecMutex.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/RecMutex.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/UUID.h $(includedir)/IceUtil/Unicode.h CountDownLatchTest.h TestBase.h ../../include/TestCommon.h
-TestSuite$(OBJEXT): TestSuite.cpp TestSuite.h TestBase.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h CountDownLatchTest.h MutexTest.h RecMutexTest.h RWRecMutexTest.h StaticMutexTest.h CreateTest.h AliveTest.h StartTest.h MonitorMutexTest.h MonitorRecMutexTest.h
+TestSuite$(OBJEXT): TestSuite.cpp TestSuite.h TestBase.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h CountDownLatchTest.h MutexTest.h RecMutexTest.h CreateTest.h AliveTest.h StartTest.h MonitorMutexTest.h MonitorRecMutexTest.h
Client$(OBJEXT): Client.cpp $(includedir)/IceUtil/IceUtil.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/AbstractMutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/Cache.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/IceUtil/CountDownLatch.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/CtrlCHandler.h $(includedir)/IceUtil/Functional.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/MutexPtrLock.h $(includedir)/IceUtil/RWRecMutex.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/RecMutex.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/UUID.h $(includedir)/IceUtil/Unicode.h ../../include/TestCommon.h TestSuite.h TestBase.h
diff --git a/cpp/test/IceUtil/thread/Makefile b/cpp/test/IceUtil/thread/Makefile
index f3c69d829ca..c0cea83e9a1 100644
--- a/cpp/test/IceUtil/thread/Makefile
+++ b/cpp/test/IceUtil/thread/Makefile
@@ -17,9 +17,7 @@ OBJS = TestBase.o \
CreateTest.o \
AliveTest.o \
StartTest.o \
- RWRecMutexTest.o \
RecMutexTest.o \
- StaticMutexTest.o \
MutexTest.o \
MonitorMutexTest.o \
MonitorRecMutexTest.o \
diff --git a/cpp/test/IceUtil/thread/Makefile.mak b/cpp/test/IceUtil/thread/Makefile.mak
index de9de80b34f..e608e4e59e8 100644
--- a/cpp/test/IceUtil/thread/Makefile.mak
+++ b/cpp/test/IceUtil/thread/Makefile.mak
@@ -17,9 +17,7 @@ OBJS = TestBase.obj \
CreateTest.obj \
AliveTest.obj \
StartTest.obj \
- RWRecMutexTest.obj \
RecMutexTest.obj \
- StaticMutexTest.obj \
MutexTest.obj \
MonitorMutexTest.obj \
MonitorRecMutexTest.obj \
diff --git a/cpp/test/IceUtil/thread/RWRecMutexTest.cpp b/cpp/test/IceUtil/thread/RWRecMutexTest.cpp
deleted file mode 100644
index a74fda1e708..00000000000
--- a/cpp/test/IceUtil/thread/RWRecMutexTest.cpp
+++ /dev/null
@@ -1,885 +0,0 @@
-// **********************************************************************
-//
-// Copyright (c) 2003-2009 ZeroC, Inc. All rights reserved.
-//
-// This copy of Ice is licensed to you under the terms described in the
-// ICE_LICENSE file included in this distribution.
-//
-// **********************************************************************
-
-//
-// We disable deprecation warning here, to allow clean compilation of
-// of deprecated methods.
-//
-#ifdef _MSC_VER
-# pragma warning( disable : 4996 )
-#endif
-
-#include <IceUtil/IceUtil.h>
-
-#include <RWRecMutexTest.h>
-#include <TestCommon.h>
-
-using namespace std;
-using namespace IceUtil;
-
-static const std::string rwRecMutexTestName("read/write recursive mutex");
-
-class RWRecMutexTestThread : public Thread
-{
-public:
-
- RWRecMutexTestThread(RWRecMutex& m) :
- _mutex(m),
- _tryLock(false)
- {
- }
-
- void
- waitTryLock()
- {
- Mutex::Lock lock(_tryLockMutex);
- while(!_tryLock)
- {
- _tryLockCond.wait(lock);
- }
- }
-
-protected:
-
- RWRecMutex& _mutex;
- bool _tryLock;
-
- //
- // Use native Condition variable here, not Monitor.
- //
- Cond _tryLockCond;
- Mutex _tryLockMutex;
-};
-
-class RWRecMutexReadTestThread : public RWRecMutexTestThread
-{
-public:
-
- RWRecMutexReadTestThread(RWRecMutex& m) :
- RWRecMutexTestThread(m)
- {
- }
-
- virtual void
- run()
- {
- RWRecMutex::TryRLock tlock(_mutex);
- test(tlock.acquired());
-
- {
- Mutex::Lock lock(_tryLockMutex);
- _tryLock = true;
- }
- _tryLockCond.signal();
-
- RWRecMutex::RLock lock(_mutex);
- }
-};
-
-class RWRecMutexReadTestThread2 : public RWRecMutexTestThread
-{
-public:
-
- RWRecMutexReadTestThread2(RWRecMutex& m) :
- RWRecMutexTestThread(m)
- {
- }
-
- virtual void
- run()
- {
-
- RWRecMutex::TryRLock tlock(_mutex);
- test(!tlock.acquired());
-
- {
- Mutex::Lock lock(_tryLockMutex);
- _tryLock = true;
- }
- _tryLockCond.signal();
-
- RWRecMutex::RLock lock(_mutex);
- }
-};
-
-class RWRecMutexUpgradeReadThread : public Thread
-{
-public:
-
- RWRecMutexUpgradeReadThread(RWRecMutex& m) :
- _mutex(m),
- _unlock(false),
- _lock(false)
- {
- }
- virtual void
- run()
- {
- RWRecMutex::RLock lock(_mutex);
-
- signalLock();
- waitUnlock();
- }
-
- void
- waitUnlock()
- {
- Mutex::Lock lock(_unlockMutex);
- while(!_unlock)
- {
- _unlockCond.wait(lock);
- }
- }
-
- void
- signalUnlock()
- {
- Mutex::Lock lock(_unlockMutex);
- _unlock = true;
- _unlockCond.signal();
- }
-
- void
- signalLock()
- {
- Mutex::Lock lock(_lockMutex);
- _lock = true;
- _lockCond.signal();
- }
-
- void
- waitLock()
- {
- Mutex::Lock lock(_lockMutex);
- while(!_lock)
- {
- _lockCond.wait(lock);
- }
- }
-
-private:
-
- RWRecMutex& _mutex;
-
- //
- // Use native Condition variable here, not Monitor.
- //
- Cond _unlockCond;
- Mutex _unlockMutex;
- bool _unlock;
-
- Cond _lockCond;
- Mutex _lockMutex;
- bool _lock;
-};
-typedef Handle<RWRecMutexUpgradeReadThread> RWRecMutexUpgradeReadThreadPtr;
-
-class RWRecMutexUpgradeTestThread : public Thread
-{
-public:
-
- RWRecMutexUpgradeTestThread(RWRecMutex& m) :
- _mutex(m),
- _lock(false),
- _upgradeAcquired(false)
- {
- }
-
- virtual void
- run()
- {
- RWRecMutex::RLock lock(_mutex);
-
- signalLock();
- lock.upgrade();
-
- _upgradeAcquired = true;
- }
-
- void
- signalLock()
- {
- Mutex::Lock lock(_lockMutex);
- _lock = true;
- _lockCond.signal();
- }
-
- void
- waitLock()
- {
- Mutex::Lock lock(_lockMutex);
- while(!_lock)
- {
- _lockCond.wait(lock);
- }
- }
-
- bool
- upgradeAcquired() const
- {
- return _upgradeAcquired;
- }
-
-private:
-
- RWRecMutex& _mutex;
-
- //
- // Use native Condition variable here, not Monitor.
- //
- Cond _lockCond;
- Mutex _lockMutex;
- bool _lock;
-
- bool _upgradeAcquired;
-};
-typedef Handle<RWRecMutexUpgradeTestThread> RWRecMutexUpgradeTestThreadPtr;
-
-class RWRecMutexWriteTestThread : public RWRecMutexTestThread
-{
-public:
-
- RWRecMutexWriteTestThread(RWRecMutex& m) :
- RWRecMutexTestThread(m)
- {
- }
-
- virtual void
- run()
- {
-
- RWRecMutex::TryWLock tlock(_mutex);
- test(!tlock.acquired());
-
- {
- Mutex::Lock lock(_tryLockMutex);
- _tryLock = true;
- }
- _tryLockCond.signal();
-
- RWRecMutex::WLock lock(_mutex);
- }
-};
-typedef Handle<RWRecMutexTestThread> RWRecMutexTestThreadPtr;
-
-class RWRecMutexUpgradeThread : public Thread, public IceUtil::Monitor<IceUtil::Mutex>
-{
-public:
-
- RWRecMutexUpgradeThread(RWRecMutex& m, bool timed = false)
- : _m(m),
- _timed(timed),
- _destroyed(false),
- _upgrading(false),
- _hasWriteLock(false),
- _failed(false)
- {
- }
-
- virtual void
- run()
- {
- //
- // Acquire a read lock.
- //
- RWRecMutex::RLock tlock(_m);
-
- {
- Lock sync(*this);
- _upgrading = true;
- notify();
- }
-
- try
- {
- if(_timed)
- {
- if(!_m.timedUpgrade(IceUtil::Time::seconds(10)))
- {
- _failed = true;
- }
- }
- else
- {
- _m.upgrade();
- }
- }
- catch(DeadlockException&)
- {
- _failed = true;
- }
-
- {
- Lock sync(*this);
- _hasWriteLock = true;
- notify();
-
- while(!_destroyed)
- {
- wait();
- }
- }
- }
-
- void
- waitUpgrade()
- {
- Lock sync(*this);
-
- //
- // Wait for the _upgrading flag to be set.
- //
- while(!_upgrading)
- {
- wait();
- }
- }
-
- void
- destroy()
- {
- Lock sync(*this);
- _destroyed = true;
- notify();
- }
-
- //
- // This waits a maximum of N seconds if the lock is not already
- // acquired. It could while forever, but that would cause the test
- // to hang in the event of a failure.
- //
- bool
- waitHasWriteLock()
- {
- Lock sync(*this);
- if(!_hasWriteLock)
- {
- timedWait(Time::seconds(10));
- }
- return _hasWriteLock;
- }
-
- bool
- failed() const
- {
- return _failed;
- }
-
-private:
-
- RWRecMutex& _m;
- bool _timed;
- bool _destroyed;
- bool _upgrading;
- bool _hasWriteLock;
- bool _failed;
-};
-typedef Handle<RWRecMutexUpgradeThread> RWRecMutexUpgradeThreadPtr;
-
-class RWRecMutexWriteThread : public Thread, public IceUtil::Monitor<IceUtil::Mutex>
-{
-public:
-
- RWRecMutexWriteThread(RWRecMutex& m)
- : _m(m),
- _destroyed(false),
- _waitWrite(false),
- _hasWriteLock(false)
- {
- }
-
- virtual void
- run()
- {
- {
- Lock sync(*this);
- _waitWrite = true;
- notify();
- }
- //
- // Acquire a read lock.
- //
- RWRecMutex::WLock sync(_m);
-
- {
- Lock sync(*this);
- _hasWriteLock = true;
- notify();
-
- while(!_destroyed)
- {
- wait();
- }
- }
- }
-
- void
- waitWrite()
- {
- Lock sync(*this);
-
- //
- // Wait for the _upgrading flag to be set.
- //
- while(!_waitWrite)
- {
- wait();
- }
-
- //
- // Its necessary to sleep for 1 second to ensure that the
- // thread is actually IN the upgrade and waiting.
- //
- ThreadControl::sleep(Time::seconds(1));
- }
-
- void
- destroy()
- {
- Lock sync(*this);
- _destroyed = true;
- notify();
- }
-
- bool
- hasWriteLock()
- {
- Lock sync(*this);
- return _hasWriteLock;
- }
-
- //
- // This waits a maximum of N seconds if the lock is not already
- // acquired. It could while forever, but that would cause the test
- // to hang in the event of a failure.
- //
- bool
- waitHasWriteLock()
- {
- Lock sync(*this);
- if(!_hasWriteLock)
- {
- timedWait(Time::seconds(10));
- }
- return _hasWriteLock;
- }
-
-private:
-
- RWRecMutex& _m;
- bool _destroyed;
- bool _waitWrite;
- bool _hasWriteLock;
-};
-typedef Handle<RWRecMutexWriteThread> RWRecMutexWriteThreadPtr;
-
-RWRecMutexTest::RWRecMutexTest() :
- TestBase(rwRecMutexTestName)
-{
-}
-
-void
-RWRecMutexTest::run()
-{
- RWRecMutex mutex;
- RWRecMutexTestThreadPtr t;
- ThreadControl control;
-
- // TEST: TryLock (read)
- {
- RWRecMutex::RLock rlock(mutex);
-
- // RLock testing
- test(rlock.acquired());
-
- try
- {
- rlock.acquire();
- test(false);
- }
- catch(const ThreadLockedException&)
- {
- // Expected
- }
-
- try
- {
- rlock.tryAcquire();
- test(false);
- }
- catch(const ThreadLockedException&)
- {
- // Expected
- }
-
- test(rlock.acquired());
- rlock.release();
- test(!rlock.acquired());
-
- try
- {
- rlock.release();
- test(false);
- }
- catch(const ThreadLockedException&)
- {
- // Expected
- }
-
- test(rlock.tryAcquire() == true);
- test(rlock.acquired());
-
- RWRecMutex::RLock rlock2(mutex);
-
- RWRecMutex::TryRLock trlock(mutex);
- test(trlock.acquired());
-
- RWRecMutex::TryWLock twlock(mutex);
- test(!twlock.acquired());
-
- RWRecMutex::TryWLock twlock2(mutex, Time::milliSeconds(10));
- test(!twlock2.acquired());
- }
-
- // TEST: TryLock (write)
- {
- RWRecMutex::WLock wlock(mutex);
-
- // WLock testing
- test(wlock.acquired());
-
- try
- {
- wlock.acquire();
- test(false);
- }
- catch(const ThreadLockedException&)
- {
- // Expected
- }
-
- try
- {
- wlock.tryAcquire();
- test(false);
- }
- catch(const ThreadLockedException&)
- {
- // Expected
- }
-
- test(wlock.acquired());
- wlock.release();
- test(!wlock.acquired());
-
- try
- {
- wlock.release();
- test(false);
- }
- catch(const ThreadLockedException&)
- {
- // Expected
- }
-
- test(wlock.tryAcquire() == true);
- test(wlock.acquired());
-
- RWRecMutex::TryRLock trlock(mutex);
- test(!trlock.acquired());
-
- RWRecMutex::TryRLock trlock2(mutex, Time::milliSeconds(10));
- test(!trlock2.acquired());
-
- RWRecMutex::TryWLock twlock(mutex);
- test(twlock.acquired());
-
- RWRecMutex::TryWLock twlock2(mutex, Time::milliSeconds(10));
- test(twlock2.acquired());
- }
-
- // TEST: read lock
- {
- RWRecMutex::RLock rlock(mutex);
-
- // TEST: Start thread, try to acquire the mutex.
- t = new RWRecMutexReadTestThread(mutex);
- control = t->start();
-
- // TEST: Wait until the tryLock has been tested.
- t->waitTryLock();
- }
-
- //
- // TEST: Once the mutex has been released, the thread should
- // acquire the mutex and then terminate.
- //
- control.join();
-
- // TEST: write lock
- {
- RWRecMutex::WLock wlock(mutex);
-
- // TEST: Start thread, try to acquire the mutex.
- t = new RWRecMutexWriteTestThread(mutex);
- control = t->start();
-
- // TEST: Wait until the tryLock has been tested.
- t->waitTryLock();
- }
-
- //
- // TEST: Once the mutex has been released, the thread should
- // acquire the mutex and then terminate.
- //
- control.join();
-
- // TEST: Lock precedence. Writers have precedence over readers.
- {
- RWRecMutex::RLock rlock(mutex);
-
- // Start thread that tries to acquire write lock
- t = new RWRecMutexWriteTestThread(mutex);
- control = t->start();
-
- // TEST: Wait until the tryLock has been tested. The thread is
- // now waiting on a write lock.
- t->waitTryLock();
-
- // It's necessary for a small sleep here to ensure that the
- // thread is actually waiting on a write lock.
- ThreadControl::sleep(Time::seconds(1));
-
- RWRecMutex::TryRLock trlock(mutex);
- test(!trlock.acquired());
- }
-
- //
- // TEST: Once the mutex has been released, the thread should
- // acquire the mutex and then terminate.
- //
- control.join();
-
- // TEST: Lock upgrading.
- {
- RWRecMutex::RLock rlock(mutex);
-
- //
- // Mutex now holds a write lock.
- //
- mutex.upgrade();
-
- // Start thread that tries to acquire write lock
- t = new RWRecMutexReadTestThread2(mutex);
- control = t->start();
-
- // TEST: Wait until the tryLock has been tested. The thread is
- // now waiting on a read lock.
- t->waitTryLock();
-
- // It's necessary for a small sleep here to ensure that the
- // thread is actually waiting on a read lock.
- ThreadControl::sleep(Time::seconds(1));
- }
-
- //
- // TEST: Once the mutex has been released, the thread should
- // acquire the mutex and then terminate.
- //
- control.join();
-
- //
- // COMPILERBUG: Under Linux with gcc this causes the Mutex test to
- // fail for some unknown reason. After spending more than enough
- // time looking into this problem it was decided that this is a
- // compiler bug of some sort.
- //
-#if !(defined(__linux) && defined(__GNUC__))
- // TEST: Lock upgrading. This time a reader thread is started
- // first.
- {
- RWRecMutexUpgradeReadThreadPtr t1 = new RWRecMutexUpgradeReadThread(mutex);
- control = t1->start();
-
- // Wait for the thread to acquire the read lock.
- t1->waitLock();
-
- // Spawn a thread to try acquiring the lock
- RWRecMutexUpgradeTestThreadPtr t2 = new RWRecMutexUpgradeTestThread(mutex);
- ThreadControl control2 = t2->start();
- t2->waitLock();
-
- //
- // Small sleep to find out whether the thread actually
- // terminates (which means that the write lock upgrade was
- // mistakenly acquired).
- //
- ThreadControl::sleep(Time::seconds(1));
-
- test(!t2->upgradeAcquired());
-
- //
- // A read lock at this point should fail.
- //
- RWRecMutex::TryRLock trlock(mutex);
- test(!trlock.acquired());
-
- //
- // As should a write lock.
- //
- RWRecMutex::TryWLock twlock(mutex);
- test(!twlock.acquired());
-
- //
- // Once the read lock is released then the upgrade should
- // succeed & the thread should terminate.
- //
- t1->signalUnlock();
-
- control2.join();
- control.join();
-
- //
- // Now both a read & write lock should be available.
- //
- {
- RWRecMutex::WLock rlock2(mutex);
- }
- {
- RWRecMutex::RLock rlock2(mutex);
- }
- }
-#endif
-
- // TEST: Ensure that only one reader can upgrade to a writer.
- // Other readers get a DeadlockException.
- {
- mutex.readLock();
-
- RWRecMutexUpgradeThreadPtr t1 = new RWRecMutexUpgradeThread(mutex);
- ThreadControl control1 = t1->start();
-
- //
- // Wait for the thread to get into the upgrade call. The
- // upgrade will hang since the readLock is held by this thread
- // and therefore cannot succeed until we release our read
- // lock.
- //
- t1->waitUpgrade();
-
- //
- // Its necessary to sleep for 1 second to ensure that the
- // thread is actually IN the upgrade and waiting.
- //
- ThreadControl::sleep(Time::seconds(1));
-
- try
- {
- mutex.upgrade();
- test(false);
- }
- catch(const DeadlockException&)
- {
- }
-
- //
- // Release the waiting thread, join.
- //
- mutex.unlock();
- t1->destroy();
- control1.join();
-
- test(!t1->failed());
- }
-
- // TEST: Same as previous test, but for a timedUpgrade.
- {
- mutex.readLock();
-
- RWRecMutexUpgradeThreadPtr t1 = new RWRecMutexUpgradeThread(mutex, true);
- ThreadControl control1 = t1->start();
-
- t1->waitUpgrade();
- //
- // Its necessary to sleep for 1 second to ensure that the
- // thread is actually IN the upgrade and waiting.
- //
- ThreadControl::sleep(Time::seconds(1));
-
- try
- {
- mutex.upgrade();
- test(false);
- }
- catch(const DeadlockException&)
- {
- }
-
- //
- // Release the waiting thread, join.
- //
- mutex.unlock();
- t1->destroy();
- control1.join();
-
- test(!t1->failed());
- }
-
- // TEST: Check that an upgrader is given preference over a writer.
- {
- mutex.readLock();
-
- RWRecMutexUpgradeThreadPtr t1 = new RWRecMutexUpgradeThread(mutex);
-
- ThreadControl control1 = t1->start();
-
- //
- // Its not necessary to sleep here, since the upgrade thread
- // acquires the read lock before signalling. Therefore the
- // write thread cannot get the write lock.
- //
- t1->waitUpgrade();
-
- RWRecMutexWriteThreadPtr t2 = new RWRecMutexWriteThread(mutex);
- ThreadControl control2 = t2->start();
- t2->waitWrite();
- //
- // Its necessary to sleep for 1 second to ensure that the
- // thread is actually IN the write lock and waiting.
- //
- ThreadControl::sleep(Time::seconds(1));
-
- //
- // Unlocking the read mutex lets the upgrade continue. At this
- // point t1 should have the write-lock, and t2 should not.
- //
- test(!t2->hasWriteLock());
- mutex.unlock();
-
- //
- // Wait for t1 to get the write lock. It will not release it
- // until the thread is destroyed. t2 should not have the write
- // lock.
- //
- test(!t1->failed());
- test(t1->waitHasWriteLock());
- test(!t2->hasWriteLock());
- t1->destroy();
- t2->destroy();
-
- //
- // After the thread has terminated the thread must have
- // acquired the write lock.
- //
- test(t2->waitHasWriteLock());
-
- control1.join();
- control2.join();
- }
-}
diff --git a/cpp/test/IceUtil/thread/RWRecMutexTest.h b/cpp/test/IceUtil/thread/RWRecMutexTest.h
deleted file mode 100644
index 6f7801ecf69..00000000000
--- a/cpp/test/IceUtil/thread/RWRecMutexTest.h
+++ /dev/null
@@ -1,26 +0,0 @@
-// **********************************************************************
-//
-// Copyright (c) 2003-2009 ZeroC, Inc. All rights reserved.
-//
-// This copy of Ice is licensed to you under the terms described in the
-// ICE_LICENSE file included in this distribution.
-//
-// **********************************************************************
-
-#ifndef RW_REC_MUTEX_TEST_H
-#define RE_REC_MUTEX_TEST_H
-
-#include <TestBase.h>
-
-class RWRecMutexTest : public TestBase
-{
-public:
-
- RWRecMutexTest();
-
-private:
-
- virtual void run();
-};
-
-#endif
diff --git a/cpp/test/IceUtil/thread/StaticMutexTest.cpp b/cpp/test/IceUtil/thread/StaticMutexTest.cpp
deleted file mode 100644
index 958c0670cce..00000000000
--- a/cpp/test/IceUtil/thread/StaticMutexTest.cpp
+++ /dev/null
@@ -1,153 +0,0 @@
-// **********************************************************************
-//
-// Copyright (c) 2003-2009 ZeroC, Inc. All rights reserved.
-//
-// This copy of Ice is licensed to you under the terms described in the
-// ICE_LICENSE file included in this distribution.
-//
-// **********************************************************************
-
-//
-// We disable deprecation warning here, to allow clean compilation of
-// of deprecated methods.
-//
-#ifdef _MSC_VER
-# pragma warning( disable : 4996 )
-#endif
-
-#include <IceUtil/IceUtil.h>
-
-#include <StaticMutexTest.h>
-#include <TestCommon.h>
-
-using namespace std;
-using namespace IceUtil;
-
-static const string mutexTestName("static mutex");
-
-static StaticMutex staticMutex = ICE_STATIC_MUTEX_INITIALIZER;
-
-class StaticMutexTestThread : public Thread
-{
-public:
-
- StaticMutexTestThread() :
- _tryLock(false)
- {
- }
-
- virtual void run()
- {
- StaticMutex::TryLock tlock(staticMutex);
- test(!tlock.acquired());
-
- {
- Mutex::Lock lock(_tryLockMutex);
- _tryLock = true;
- }
- _tryLockCond.signal();
-
- StaticMutex::Lock lock(staticMutex);
- }
-
- void
- waitTryLock()
- {
- Mutex::Lock lock(_tryLockMutex);
- while(!_tryLock)
- {
- _tryLockCond.wait(lock);
- }
- }
-
-private:
-
- bool _tryLock;
- //
- // Use native Condition variable here, not Monitor.
- //
- Cond _tryLockCond;
- Mutex _tryLockMutex;
-};
-
-typedef Handle<StaticMutexTestThread> StaticMutexTestThreadPtr;
-
-StaticMutexTest::StaticMutexTest() :
- TestBase(mutexTestName)
-{
-}
-
-void
-StaticMutexTest::run()
-{
- StaticMutexTestThreadPtr t;
- ThreadControl control;
-
- {
- StaticMutex::Lock lock(staticMutex);
-
- // LockT testing:
- //
-
- test(lock.acquired());
-
- try
- {
- lock.acquire();
- test(false);
- }
- catch(const ThreadLockedException&)
- {
- // Expected
- }
-
- try
- {
- lock.tryAcquire();
- test(false);
- }
- catch(const ThreadLockedException&)
- {
- // Expected
- }
-
- test(lock.acquired());
- lock.release();
- test(!lock.acquired());
-
- try
- {
- lock.release();
- test(false);
- }
- catch(const ThreadLockedException&)
- {
- // Expected
- }
-
- StaticMutex::TryLock lock2(staticMutex);
- try
- {
- test(lock.tryAcquire() == false);
- }
- catch(const ThreadLockedException&)
- {
- }
- lock2.release();
- test(lock.tryAcquire() == true);
- test(lock.acquired());
-
- // TEST: Start thread, try to acquire the mutex.
- t = new StaticMutexTestThread;
- control = t->start();
-
- // TEST: Wait until the tryLock has been tested.
- t->waitTryLock();
- }
-
- //
- // TEST: Once the mutex has been released, the thread should
- // acquire the mutex and then terminate.
- //
- control.join();
-}
diff --git a/cpp/test/IceUtil/thread/StaticMutexTest.h b/cpp/test/IceUtil/thread/StaticMutexTest.h
deleted file mode 100644
index 1899450c0e6..00000000000
--- a/cpp/test/IceUtil/thread/StaticMutexTest.h
+++ /dev/null
@@ -1,26 +0,0 @@
-// **********************************************************************
-//
-// Copyright (c) 2003-2009 ZeroC, Inc. All rights reserved.
-//
-// This copy of Ice is licensed to you under the terms described in the
-// ICE_LICENSE file included in this distribution.
-//
-// **********************************************************************
-
-#ifndef STATIC_MUTEX_TEST_H
-#define STATIC_MUTEX_TEST_H
-
-#include <TestBase.h>
-
-class StaticMutexTest : public TestBase
-{
-public:
-
- StaticMutexTest();
-
-private:
-
- virtual void run();
-};
-
-#endif
diff --git a/cpp/test/IceUtil/thread/TestSuite.cpp b/cpp/test/IceUtil/thread/TestSuite.cpp
index c778c15f73b..e0b5bec6ab6 100644
--- a/cpp/test/IceUtil/thread/TestSuite.cpp
+++ b/cpp/test/IceUtil/thread/TestSuite.cpp
@@ -11,8 +11,6 @@
#include <CountDownLatchTest.h>
#include <MutexTest.h>
#include <RecMutexTest.h>
-#include <RWRecMutexTest.h>
-#include <StaticMutexTest.h>
#include <CreateTest.h>
#include <AliveTest.h>
#include <StartTest.h>
@@ -30,8 +28,6 @@ initializeTestSuite()
allTests.push_back(new CreateTest);
allTests.push_back(new AliveTest);
allTests.push_back(new RecMutexTest);
- allTests.push_back(new RWRecMutexTest);
- allTests.push_back(new StaticMutexTest);
allTests.push_back(new MonitorMutexTest);
allTests.push_back(new MonitorRecMutexTest);
}