summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/Glacier2/RouterI.cpp20
-rw-r--r--cpp/src/Glacier2/RouterI.h2
-rw-r--r--cpp/src/Glacier2/SessionRouterI.cpp6
-rw-r--r--cpp/src/Glacier2/SessionRouterI.h1
4 files changed, 19 insertions, 10 deletions
diff --git a/cpp/src/Glacier2/RouterI.cpp b/cpp/src/Glacier2/RouterI.cpp
index 458ad6980f1..57b022fec2f 100644
--- a/cpp/src/Glacier2/RouterI.cpp
+++ b/cpp/src/Glacier2/RouterI.cpp
@@ -127,10 +127,7 @@ Glacier2::RouterI::addProxy(const ObjectPrx& proxy, const Current& current)
ObjectProxySeq
Glacier2::RouterI::addProxies(const ObjectProxySeq& proxies, const Current& current)
{
- IceUtil::Mutex::Lock lock(*this);
-
- _timestamp = IceUtil::Time::now(IceUtil::Time::Monotonic);
-
+ updateTimestamp();
return _clientBlobject->add(proxies, current);
}
@@ -171,10 +168,7 @@ Glacier2::RouterI::getSessionTimeout(const Current&) const
ClientBlobjectPtr
Glacier2::RouterI::getClientBlobject() const
{
- IceUtil::Mutex::Lock lock(*this);
-
- _timestamp = IceUtil::Time::now(IceUtil::Time::Monotonic);
-
+ updateTimestamp();
return _clientBlobject;
}
@@ -198,8 +192,7 @@ Glacier2::RouterI::getSession() const
IceUtil::Time
Glacier2::RouterI::getTimestamp() const
{
- IceUtil::Mutex::TryLock lock(*this);
-
+ IceUtil::Mutex::TryLock lock(_timestampMutex);
if(lock.acquired())
{
return _timestamp;
@@ -210,6 +203,13 @@ Glacier2::RouterI::getTimestamp() const
}
}
+void
+Glacier2::RouterI::updateTimestamp() const
+{
+ IceUtil::Mutex::Lock lock(_timestampMutex);
+ _timestamp = IceUtil::Time::now(IceUtil::Time::Monotonic);
+}
+
string
Glacier2::RouterI::toString() const
{
diff --git a/cpp/src/Glacier2/RouterI.h b/cpp/src/Glacier2/RouterI.h
index 0c63e37c575..b151e2d9d44 100644
--- a/cpp/src/Glacier2/RouterI.h
+++ b/cpp/src/Glacier2/RouterI.h
@@ -53,6 +53,7 @@ public:
SessionPrx getSession() const;
IceUtil::Time getTimestamp() const;
+ void updateTimestamp() const;
std::string toString() const;
@@ -68,6 +69,7 @@ private:
const SessionPrx _session;
const Ice::Identity _controlId;
const Ice::Context _sslContext;
+ const IceUtil::Mutex _timestampMutex;
mutable IceUtil::Time _timestamp;
};
diff --git a/cpp/src/Glacier2/SessionRouterI.cpp b/cpp/src/Glacier2/SessionRouterI.cpp
index 985f1892bfe..1cb60674596 100644
--- a/cpp/src/Glacier2/SessionRouterI.cpp
+++ b/cpp/src/Glacier2/SessionRouterI.cpp
@@ -951,6 +951,12 @@ Glacier2::SessionRouterI::getSessionTimeout(const Ice::Current&) const
return _sessionTimeout.toSeconds();
}
+void
+Glacier2::SessionRouterI::ice_ping(const Ice::Current& current) const
+{
+ getRouter(current.con, current.id)->updateTimestamp();
+}
+
RouterIPtr
Glacier2::SessionRouterI::getRouter(const ConnectionPtr& connection, const Ice::Identity& id) const
{
diff --git a/cpp/src/Glacier2/SessionRouterI.h b/cpp/src/Glacier2/SessionRouterI.h
index 87ebd7a5a80..04a538da5f0 100644
--- a/cpp/src/Glacier2/SessionRouterI.h
+++ b/cpp/src/Glacier2/SessionRouterI.h
@@ -97,6 +97,7 @@ public:
const Ice::Current&);
virtual void destroySession(const ::Ice::Current&);
virtual Ice::Long getSessionTimeout(const ::Ice::Current&) const;
+ virtual void ice_ping(const Ice::Current&) const;
RouterIPtr getRouter(const Ice::ConnectionPtr&, const Ice::Identity&) const;
RouterIPtr getRouter(const std::string&) const;