diff options
author | Matthew Newhook <matthew@zeroc.com> | 2005-09-19 05:54:42 +0000 |
---|---|---|
committer | Matthew Newhook <matthew@zeroc.com> | 2005-09-19 05:54:42 +0000 |
commit | a11ea64ba4cc566f1928b5df36d4b8114d57e8f0 (patch) | |
tree | b33f8818a35f03fffdc46963639e4302c66b1e64 /cpp/src/Ice/RouterInfo.cpp | |
parent | minor refactoring (diff) | |
download | ice-a11ea64ba4cc566f1928b5df36d4b8114d57e8f0.tar.bz2 ice-a11ea64ba4cc566f1928b5df36d4b8114d57e8f0.tar.xz ice-a11ea64ba4cc566f1928b5df36d4b8114d57e8f0.zip |
http://bugzilla.zeroc.com/bugzilla/show_bug.cgi?id=435. added
removeRouter().
Diffstat (limited to 'cpp/src/Ice/RouterInfo.cpp')
-rw-r--r-- | cpp/src/Ice/RouterInfo.cpp | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/cpp/src/Ice/RouterInfo.cpp b/cpp/src/Ice/RouterInfo.cpp index c0e5e64e9a9..93915ee1377 100644 --- a/cpp/src/Ice/RouterInfo.cpp +++ b/cpp/src/Ice/RouterInfo.cpp @@ -79,6 +79,37 @@ IceInternal::RouterManager::get(const RouterPrx& rtr) return _tableHint->second; } +RouterInfoPtr +IceInternal::RouterManager::erase(const RouterPrx& rtr) +{ + RouterInfoPtr info; + if(rtr) + { + RouterPrx router = RouterPrx::uncheckedCast(rtr->ice_router(0)); // The router cannot be routed. + IceUtil::Mutex::Lock sync(*this); + + map<RouterPrx, RouterInfoPtr>::iterator p = _table.end(); + if(_tableHint != _table.end() && _tableHint->first == router) + { + p = _tableHint; + _tableHint = _table.end(); + } + + if(p == _table.end()) + { + p = _table.find(router); + } + + if(p != _table.end()) + {
+ info = p->second; + _table.erase(p); + } + } + + return info; +} + IceInternal::RouterInfo::RouterInfo(const RouterPrx& router) : _router(router), _routingTable(new RoutingTable) |