diff options
Diffstat (limited to 'cpp')
-rw-r--r-- | cpp/CHANGES | 38 | ||||
-rw-r--r-- | cpp/src/Glacier2/Blobject.cpp | 6 | ||||
-rw-r--r-- | cpp/src/Glacier2/RequestQueue.cpp | 7 |
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 |