diff options
author | Jose <jose@zeroc.com> | 2009-12-16 23:24:32 +0100 |
---|---|---|
committer | Jose <jose@zeroc.com> | 2009-12-16 23:24:32 +0100 |
commit | 2d9c9295db9dabf20e860755e59229c01e18363b (patch) | |
tree | 531454063b912e6c3a4ea2c2089b495f73396b45 /cpp | |
parent | bug 4492 - PHP demos don't build against RPMs (diff) | |
download | ice-2d9c9295db9dabf20e860755e59229c01e18363b.tar.bz2 ice-2d9c9295db9dabf20e860755e59229c01e18363b.tar.xz ice-2d9c9295db9dabf20e860755e59229c01e18363b.zip |
Remove StaticMutexTest & RWRecMutexTest
Diffstat (limited to 'cpp')
-rw-r--r-- | cpp/test/IceUtil/thread/.depend | 4 | ||||
-rw-r--r-- | cpp/test/IceUtil/thread/Makefile | 2 | ||||
-rw-r--r-- | cpp/test/IceUtil/thread/Makefile.mak | 2 | ||||
-rw-r--r-- | cpp/test/IceUtil/thread/RWRecMutexTest.cpp | 885 | ||||
-rw-r--r-- | cpp/test/IceUtil/thread/RWRecMutexTest.h | 26 | ||||
-rw-r--r-- | cpp/test/IceUtil/thread/StaticMutexTest.cpp | 153 | ||||
-rw-r--r-- | cpp/test/IceUtil/thread/StaticMutexTest.h | 26 | ||||
-rw-r--r-- | cpp/test/IceUtil/thread/TestSuite.cpp | 4 |
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); } |