summaryrefslogtreecommitdiff
path: root/cppe/src/IceE/RouterInfo.cpp
diff options
context:
space:
mode:
authorMatthew Newhook <matthew@zeroc.com>2005-09-19 07:23:38 +0000
committerMatthew Newhook <matthew@zeroc.com>2005-09-19 07:23:38 +0000
commitb93783c5787ebf9bc9ef3d6579d389bcc7af9398 (patch)
tree913efa3db1c22775c54f174d52db42a34913d057 /cppe/src/IceE/RouterInfo.cpp
parenthttp://bugzilla.zeroc.com/bugzilla/show_bug.cgi?id=459 (diff)
downloadice-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.cpp31
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)