summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/ConnectionFactory.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/Ice/ConnectionFactory.cpp')
-rw-r--r--cpp/src/Ice/ConnectionFactory.cpp10
1 files changed, 8 insertions, 2 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());