diff options
Diffstat (limited to 'cpp')
-rw-r--r-- | cpp/CHANGES | 6 | ||||
-rw-r--r-- | cpp/src/IceGrid/Database.cpp | 9 |
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 |