summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/Ice/RouterInfo.cpp14
-rw-r--r--cpp/src/Ice/RouterInfo.h6
-rw-r--r--cpp/src/Ice/RoutingTable.cpp7
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)
{