diff options
author | Matthew Newhook <matthew@zeroc.com> | 2005-09-19 07:23:38 +0000 |
---|---|---|
committer | Matthew Newhook <matthew@zeroc.com> | 2005-09-19 07:23:38 +0000 |
commit | b93783c5787ebf9bc9ef3d6579d389bcc7af9398 (patch) | |
tree | 913efa3db1c22775c54f174d52db42a34913d057 /cppe/src/IceE/RouterInfo.cpp | |
parent | http://bugzilla.zeroc.com/bugzilla/show_bug.cgi?id=459 (diff) | |
download | ice-b93783c5787ebf9bc9ef3d6579d389bcc7af9398.tar.bz2 ice-b93783c5787ebf9bc9ef3d6579d389bcc7af9398.tar.xz ice-b93783c5787ebf9bc9ef3d6579d389bcc7af9398.zip |
http://bugzilla.zeroc.com/bugzilla/show_bug.cgi?id=435. added
removeRouter().
Diffstat (limited to 'cppe/src/IceE/RouterInfo.cpp')
-rw-r--r-- | cppe/src/IceE/RouterInfo.cpp | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/cppe/src/IceE/RouterInfo.cpp b/cppe/src/IceE/RouterInfo.cpp index 130166f4e23..6c0e16f16cf 100644 --- a/cppe/src/IceE/RouterInfo.cpp +++ b/cppe/src/IceE/RouterInfo.cpp @@ -83,6 +83,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) |