summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/Ice/ConnectionFactory.cpp10
-rw-r--r--cpp/src/Ice/ConnectionFactory.h2
-rw-r--r--cpp/src/Ice/ConnectionI.cpp7
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)