summaryrefslogtreecommitdiff
path: root/cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp')
-rw-r--r--cpp/CHANGES6
-rw-r--r--cpp/src/IceGrid/Database.cpp9
2 files changed, 13 insertions, 2 deletions
diff --git a/cpp/CHANGES b/cpp/CHANGES
index eb6c40cc386..65644148f22 100644
--- a/cpp/CHANGES
+++ b/cpp/CHANGES
@@ -1,6 +1,12 @@
Changes since version 3.1.0
---------------------------
+- Fixed an assert in the IceGrid locator implementation which could
+ occur when using dynamic adapter registration. The assert was
+ triggered when an adapter was removed and a client was requesting
+ at the same time the adapter endpoints through the locator
+ interface.
+
- Fixed a bug in slice2cpp that caused incorrect code to be generated
if a class had member that was an interface (not class) by value:
diff --git a/cpp/src/IceGrid/Database.cpp b/cpp/src/IceGrid/Database.cpp
index bb7e5a1e86f..4b680e1ca77 100644
--- a/cpp/src/IceGrid/Database.cpp
+++ b/cpp/src/IceGrid/Database.cpp
@@ -50,10 +50,15 @@ public:
assert(false);
}
- virtual Ice::ObjectPrx
+ virtual Ice::ObjectPrx
getDirectProxy(const Ice::Current& current) const
{
- return _database->getAdapterDirectProxy(current.id.name);
+ Ice::ObjectPrx proxy = _database->getAdapterDirectProxy(current.id.name);
+ if(!proxy)
+ {
+ throw Ice::ObjectNotExistException(__FILE__, __LINE__);
+ }
+ return proxy;
}
virtual void