summaryrefslogtreecommitdiff
path: root/cpp/src/IceGrid/ReplicaSessionManager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/IceGrid/ReplicaSessionManager.cpp')
-rw-r--r--cpp/src/IceGrid/ReplicaSessionManager.cpp29
1 files changed, 24 insertions, 5 deletions
diff --git a/cpp/src/IceGrid/ReplicaSessionManager.cpp b/cpp/src/IceGrid/ReplicaSessionManager.cpp
index 6dd555ab4d0..ca7ff6e6950 100644
--- a/cpp/src/IceGrid/ReplicaSessionManager.cpp
+++ b/cpp/src/IceGrid/ReplicaSessionManager.cpp
@@ -333,11 +333,18 @@ NodePrxSeq
ReplicaSessionManager::getNodes(const NodePrxSeq& nodes) const
{
assert(_thread && _thread->getRegistry());
- try
+ if(_thread->getSession())
{
- return _thread->getRegistry()->getNodes();
+ try
+ {
+ return _thread->getRegistry()->getNodes();
+ }
+ catch(const Ice::LocalException&)
+ {
+ return nodes;
+ }
}
- catch(const Ice::LocalException&)
+ else
{
return nodes;
}
@@ -448,12 +455,24 @@ ReplicaSessionManager::createSession(InternalRegistryPrx& registry, IceUtil::Tim
if(!session)
{
- for(vector<QueryPrx>::const_iterator p = _queryObjects.begin(); p != _queryObjects.end(); ++p)
+ vector<Ice::AsyncResultPtr> results;
+ for(vector<QueryPrx>::const_iterator q = _queryObjects.begin(); q != _queryObjects.end(); ++q)
+ {
+ results.push_back((*q)->begin_findObjectById(registry->ice_getIdentity()));
+ }
+
+ for(vector<Ice::AsyncResultPtr>::const_iterator p = results.begin(); p != results.end(); ++p)
{
+ QueryPrx query = QueryPrx::uncheckedCast((*p)->getProxy());
+ if(isDestroyed())
+ {
+ break;
+ }
+
InternalRegistryPrx newRegistry;
try
{
- Ice::ObjectPrx obj = (*p)->findObjectById(registry->ice_getIdentity());
+ Ice::ObjectPrx obj = query->end_findObjectById(*p);
newRegistry = InternalRegistryPrx::uncheckedCast(obj);
if(newRegistry && used.find(newRegistry) == used.end())
{