diff options
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/Glacier2/RouterI.cpp | 20 | ||||
-rw-r--r-- | cpp/src/Glacier2/RouterI.h | 2 | ||||
-rw-r--r-- | cpp/src/Glacier2/SessionRouterI.cpp | 6 | ||||
-rw-r--r-- | cpp/src/Glacier2/SessionRouterI.h | 1 |
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; |