summaryrefslogtreecommitdiff
path: root/cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp')
-rw-r--r--cpp/CHANGES38
-rw-r--r--cpp/src/Glacier2/Blobject.cpp6
-rw-r--r--cpp/src/Glacier2/RequestQueue.cpp7
3 files changed, 28 insertions, 23 deletions
diff --git a/cpp/CHANGES b/cpp/CHANGES
index c32bf66384c..3bb72c4ddd4 100644
--- a/cpp/CHANGES
+++ b/cpp/CHANGES
@@ -1,20 +1,23 @@
Changes since version 2.1.0
---------------------------
-- Added -E option to the various Slice compilers to print
- proprocessor output on stdout.
-
-- As announced with version 1.6, slice2cpp and slice2freeze
- now require all Slice definitions to be nested inside a
- module; definitions at global scope (other than module
- definitions) now cause a hard error (whereas, previously,
- they only caused a warning).
+- A race condition with Glacier2 detaching the request handler thread
+ has been fixed.
+
+- Added -E option to the various Slice compilers to print proprocessor
+ output on stdout.
+
+- As announced with version 1.6, slice2cpp and slice2freeze now
+ require all Slice definitions to be nested inside a module;
+ definitions at global scope (other than module definitions) now
+ cause a hard error (whereas, previously, they only caused a
+ warning).
-- Fixed a bug in the option parsing for Ice tools such as
- slice2cpp, slice2java, slice2cs, etc. The option parser
- used to incorrectly complain about repeated options when
- in fact no option was repeated. Also changed the parser
- to permit options to follow an argument, so
+- Fixed a bug in the option parsing for Ice tools such as slice2cpp,
+ slice2java, slice2cs, etc. The option parser used to incorrectly
+ complain about repeated options when in fact no option was
+ repeated. Also changed the parser to permit options to follow an
+ argument, so
slice2cpp -I. x.ice
@@ -24,12 +27,11 @@ Changes since version 2.1.0
are now equivalent.
-- The Windows demo/IcePatch2/MFC example displays an error dialog
- when the patch client is run without the --IcePatch2.Endpoints
- option.
+- The Windows demo/IcePatch2/MFC example displays an error dialog when
+ the patch client is run without the --IcePatch2.Endpoints option.
-- Fixed bug where data transfer statistics were not being reported
- on outgoing datagram requests.
+- Fixed bug where data transfer statistics were not being reported on
+ outgoing datagram requests.
Changes since version 2.0.0
---------------------------
diff --git a/cpp/src/Glacier2/Blobject.cpp b/cpp/src/Glacier2/Blobject.cpp
index d26a961841e..29b7fc382bb 100644
--- a/cpp/src/Glacier2/Blobject.cpp
+++ b/cpp/src/Glacier2/Blobject.cpp
@@ -60,6 +60,12 @@ Glacier2::Blobject::Blobject(const CommunicatorPtr& communicator, bool reverse)
Int threadStackSize = _properties->getPropertyAsInt("Ice.ThreadPerConnection.StackSize");
_requestQueue->start(static_cast<size_t>(threadStackSize));
+
+ //
+ // See the comment in Glacier2::RequestQueue::destroy()
+ // for why we detach the thread.
+ //
+ _requestQueue->getThreadControl().detach();
}
catch(const IceUtil::Exception& ex)
{
diff --git a/cpp/src/Glacier2/RequestQueue.cpp b/cpp/src/Glacier2/RequestQueue.cpp
index 39064513d0e..0f3043d9495 100644
--- a/cpp/src/Glacier2/RequestQueue.cpp
+++ b/cpp/src/Glacier2/RequestQueue.cpp
@@ -145,13 +145,10 @@ Glacier2::RequestQueue::destroy()
// We don't want to wait for the RequestQueue thread, because this
// destroy() operation is called when sessions expire or are
// destroyed, in which case we do not want the session handler
- // thread to block here.
+ // thread to block here. Therefore we don't call join(), but
+ // instead detach the thread right after we start it.
//
//getThreadControl().join();
- if(getThreadControl().isAlive())
- {
- getThreadControl().detach();
- }
}
bool