diff options
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/Ice/ConnectionFactory.cpp | 10 | ||||
-rw-r--r-- | cpp/src/Ice/ConnectionFactory.h | 2 | ||||
-rw-r--r-- | cpp/src/Ice/ConnectionI.cpp | 7 |
3 files changed, 16 insertions, 3 deletions
diff --git a/cpp/src/Ice/ConnectionFactory.cpp b/cpp/src/Ice/ConnectionFactory.cpp index 4f49e28403f..fd1a188387c 100644 --- a/cpp/src/Ice/ConnectionFactory.cpp +++ b/cpp/src/Ice/ConnectionFactory.cpp @@ -80,7 +80,7 @@ IceInternal::OutgoingConnectionFactory::waitUntilFinished() { wait(); } - + // // We want to wait until all connections are finished outside the // thread synchronization. @@ -578,6 +578,13 @@ IceInternal::IncomingConnectionFactory::waitUntilFinished() _threadPerIncomingConnectionFactory = 0; // + // Clear the OA. See + // http://bugzilla.zeroc.com/bugzilla/show_bug.cgi?id=1673 for + // the details of why this is necessary. + // + _adapter = 0; + + // // We want to wait until all connections are finished outside the // thread synchronization. // @@ -789,7 +796,6 @@ IceInternal::IncomingConnectionFactory::finished(const ThreadPoolPtr& threadPool IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); - // XXX: must promoteFollower be inside or outside the mutex? threadPool->promoteFollower(); assert(threadPool.get() == dynamic_cast<ObjectAdapterI*>(_adapter.get())->getThreadPool().get()); diff --git a/cpp/src/Ice/ConnectionFactory.h b/cpp/src/Ice/ConnectionFactory.h index 3edbad75d63..830175f28fd 100644 --- a/cpp/src/Ice/ConnectionFactory.h +++ b/cpp/src/Ice/ConnectionFactory.h @@ -126,7 +126,7 @@ private: const TransceiverPtr _transceiver; const EndpointIPtr _endpoint; - const Ice::ObjectAdapterPtr _adapter; + Ice::ObjectAdapterPtr _adapter; bool _registeredWithPool; int _finishedCount; diff --git a/cpp/src/Ice/ConnectionI.cpp b/cpp/src/Ice/ConnectionI.cpp index 03971d822d3..a6c8f15c56e 100644 --- a/cpp/src/Ice/ConnectionI.cpp +++ b/cpp/src/Ice/ConnectionI.cpp @@ -463,6 +463,13 @@ Ice::ConnectionI::waitUntilFinished() secondThreadPerConnection = _secondThreadPerConnection; _secondThreadPerConnection = 0; + + // + // Clear the OA. See + // http://bugzilla.zeroc.com/bugzilla/show_bug.cgi?id=1673 for + // the details of why this is necessary. + // + _adapter = 0; } if(threadPerConnection) |