diff options
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/Ice/RouterInfo.cpp | 14 | ||||
-rw-r--r-- | cpp/src/Ice/RouterInfo.h | 6 | ||||
-rw-r--r-- | cpp/src/Ice/RoutingTable.cpp | 7 |
3 files changed, 25 insertions, 2 deletions
diff --git a/cpp/src/Ice/RouterInfo.cpp b/cpp/src/Ice/RouterInfo.cpp index 32d8dbdfd52..e695ad0214d 100644 --- a/cpp/src/Ice/RouterInfo.cpp +++ b/cpp/src/Ice/RouterInfo.cpp @@ -12,6 +12,7 @@ #include <Ice/Router.h> #include <Ice/RoutingTable.h> #include <Ice/LocalException.h> +#include <Ice/Functional.h> using namespace std; using namespace Ice; @@ -33,6 +34,8 @@ IceInternal::RouterManager::destroy() { IceUtil::Mutex::Lock sync(*this); + for_each(_table.begin(), _table.end(), Ice::secondVoidMemFun<RouterPrx, RouterInfo>(&RouterInfo::destroy)); + _table.clear(); _tableHint = _table.end(); } @@ -83,6 +86,17 @@ IceInternal::RouterInfo::RouterInfo(const RouterPrx& router) : assert(_router); } +void +IceInternal::RouterInfo::destroy() +{ + IceUtil::Mutex::Lock sync(*this); + + _clientProxy = 0; + _serverProxy = 0; + _adapter = 0; + _routingTable->clear(); +} + bool IceInternal::RouterInfo::operator==(const RouterInfo& rhs) const { diff --git a/cpp/src/Ice/RouterInfo.h b/cpp/src/Ice/RouterInfo.h index 3504a0bea89..3af6bb426a3 100644 --- a/cpp/src/Ice/RouterInfo.h +++ b/cpp/src/Ice/RouterInfo.h @@ -47,6 +47,8 @@ public: RouterInfo(const ::Ice::RouterPrx&); + void destroy(); + bool operator==(const RouterInfo&) const; bool operator!=(const RouterInfo&) const; bool operator<(const RouterInfo&) const; @@ -62,10 +64,10 @@ public: private: - ::Ice::RouterPrx _router; + ::Ice::RouterPrx _router; // Immutable. ::Ice::ObjectPrx _clientProxy; ::Ice::ObjectPrx _serverProxy; - RoutingTablePtr _routingTable; + RoutingTablePtr _routingTable; // Immutable. ::Ice::ObjectAdapterPtr _adapter; }; diff --git a/cpp/src/Ice/RoutingTable.cpp b/cpp/src/Ice/RoutingTable.cpp index f4038b0ec71..999fc5eba60 100644 --- a/cpp/src/Ice/RoutingTable.cpp +++ b/cpp/src/Ice/RoutingTable.cpp @@ -23,6 +23,13 @@ IceInternal::RoutingTable::RoutingTable() : { } +void +IceInternal::RoutingTable::clear() +{ + _table.clear(); + _tableHint = _table.end(); +} + bool IceInternal::RoutingTable::add(const ObjectPrx& prx) { |