summaryrefslogtreecommitdiff
path: root/cpp/test/IceUtil/thread/DetachTest.cpp
diff options
context:
space:
mode:
authorMichi Henning <michi@zeroc.com>2002-11-29 01:18:03 +0000
committerMichi Henning <michi@zeroc.com>2002-11-29 01:18:03 +0000
commit404a9441f45ac9ca1ba39f04c7f8d1f9fc79de5b (patch)
tree12023d167f8ab1b161aaec017a206863f4888bbf /cpp/test/IceUtil/thread/DetachTest.cpp
parentfixing potential deadlock with ObjectAdapter (diff)
downloadice-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.cpp97
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);
+}