From 712822f2a9baa48dc669df305165ae0a87fbdc57 Mon Sep 17 00:00:00 2001 From: Benoit Foucher Date: Thu, 25 Sep 2008 19:43:23 +0200 Subject: Fixed bug 3456 --- cpp/src/IceGrid/LocatorI.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'cpp/src/IceGrid/LocatorI.cpp') diff --git a/cpp/src/IceGrid/LocatorI.cpp b/cpp/src/IceGrid/LocatorI.cpp index 554a170c22d..18d9808df34 100644 --- a/cpp/src/IceGrid/LocatorI.cpp +++ b/cpp/src/IceGrid/LocatorI.cpp @@ -236,12 +236,15 @@ LocatorI::Request::activate(const string& id) // NOTE: we use a timeout large enough to ensure that the activate() call won't // timeout if the server hangs in deactivation and/or activation. // - for(LocatorAdapterInfoSeq::const_iterator p = _adapters.begin(); p != _adapters.end(); ++p) { - if(p->id == id) + Lock sync(*this); + for(LocatorAdapterInfoSeq::const_iterator p = _adapters.begin(); p != _adapters.end(); ++p) { - _locator->activate(*p, this); - _activating.insert(id); + if(p->id == id) + { + _locator->activate(*p, this); + _activating.insert(id); + } } } -- cgit v1.2.3 From b19987ad1a324152a279cfe845bd4309e8adbad5 Mon Sep 17 00:00:00 2001 From: Benoit Foucher Date: Fri, 26 Sep 2008 07:00:14 +0200 Subject: Fixed locator potential hang when resolving round-robin replica group which could occur if the replica group was removed and added again --- cpp/src/IceGrid/LocatorI.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'cpp/src/IceGrid/LocatorI.cpp') diff --git a/cpp/src/IceGrid/LocatorI.cpp b/cpp/src/IceGrid/LocatorI.cpp index 18d9808df34..3fbe3a146f1 100644 --- a/cpp/src/IceGrid/LocatorI.cpp +++ b/cpp/src/IceGrid/LocatorI.cpp @@ -687,7 +687,14 @@ LocatorI::removePendingResolve(const string& adapterId, int roundRobinCount) // if(roundRobinCount > 0) { - _database->getAdapter(adapterId)->increaseRoundRobinCount(roundRobinCount); + try + { + _database->getAdapter(adapterId)->increaseRoundRobinCount(roundRobinCount); + } + catch(const Ice::Exception&) + { + // Ignore. + } } map >::iterator p = _resolves.find(adapterId); -- cgit v1.2.3