diff options
author | Michi Henning <michi@zeroc.com> | 2002-11-29 01:18:03 +0000 |
---|---|---|
committer | Michi Henning <michi@zeroc.com> | 2002-11-29 01:18:03 +0000 |
commit | 404a9441f45ac9ca1ba39f04c7f8d1f9fc79de5b (patch) | |
tree | 12023d167f8ab1b161aaec017a206863f4888bbf /cpp/test/IceUtil/thread/DetachTest.cpp | |
parent | fixing potential deadlock with ObjectAdapter (diff) | |
download | ice-404a9441f45ac9ca1ba39f04c7f8d1f9fc79de5b.tar.bz2 ice-404a9441f45ac9ca1ba39f04c7f8d1f9fc79de5b.tar.xz ice-404a9441f45ac9ca1ba39f04c7f8d1f9fc79de5b.zip |
Added ThreadControl::detach().
Diffstat (limited to 'cpp/test/IceUtil/thread/DetachTest.cpp')
-rw-r--r-- | cpp/test/IceUtil/thread/DetachTest.cpp | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/cpp/test/IceUtil/thread/DetachTest.cpp b/cpp/test/IceUtil/thread/DetachTest.cpp new file mode 100644 index 00000000000..bd7a5499f99 --- /dev/null +++ b/cpp/test/IceUtil/thread/DetachTest.cpp @@ -0,0 +1,97 @@ +// ********************************************************************** +// +// Copyright (c) 2002 +// ZeroC, Inc. +// Billerica, MA, USA +// +// All Rights Reserved. +// +// Ice is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License version 2 as published by +// the Free Software Foundation. +// +// ********************************************************************** + +#include <IceUtil/IceUtil.h> + +#include <stdio.h> + +#include <DetachTest.h> +#include <TestCommon.h> + +using namespace std; +using namespace IceUtil; + +static const string createTestName("thread detach"); + +class DetachTestThread : public Thread +{ +public: + + DetachTestThread() + { + } + + virtual void run() + { + } +}; + +typedef Handle<DetachTestThread> DetachTestThreadPtr; + +DetachTest::DetachTest() : + TestBase(createTestName) +{ +} + +void +DetachTest::run() +{ + // + // Check that calling join() more than once raises ThreadSyscallException. + // + DetachTestThreadPtr t = new DetachTestThread(); + ThreadControl control = t->start(); + control.join(); + bool gotException = false; + try { + control.join(); + } + catch(const ThreadSyscallException&) + { + gotException = true; + } + test(gotException); + + // + // Check that calling detach() more than once raises ThreadSyscallException. + // + t = new DetachTestThread(); + control = t->start(); + control.detach(); + gotException = false; + try { + control.detach(); + } + catch(const ThreadSyscallException&) + { + gotException = true; + } + test(gotException); + + // + // Check that calling join() after detach() raises ThreadSyscallException. + // + t = new DetachTestThread(); + control = t->start(); + control.detach(); + gotException = false; + try { + control.join(); + } + catch(const ThreadSyscallException&) + { + gotException = true; + } + test(gotException); +} |