diff -Naur org/include/RCF/RcfSession.hpp mod/include/RCF/RcfSession.hpp --- org/include/RCF/RcfSession.hpp 2013-05-09 10:31:05.000000000 +0200 +++ mod/include/RCF/RcfSession.hpp 2014-10-19 17:41:32.000000000 +0200 @@ -25,6 +25,7 @@ #include #include #include +#include #include #include @@ -282,7 +283,7 @@ boost::uint32_t getPingIntervalMs(); void setPingIntervalMs(boost::uint32_t pingIntervalMs); - boost::uint32_t getTouchTimestamp(); + boost::optional getTouchTimestamp(); void touch(); @@ -395,7 +396,7 @@ bool mCloseSessionAfterWrite; boost::uint32_t mPingTimestamp; boost::uint32_t mPingIntervalMs; - boost::uint32_t mTouchTimestamp; + boost::optional mTouchTimestamp; ByteBuffer mPingBackByteBuffer; PingBackTimerEntry mPingBackTimerEntry; diff -Naur org/src/RCF/RcfSession.cpp mod/src/RCF/RcfSession.cpp --- org/src/RCF/RcfSession.cpp 2013-05-13 10:31:06.000000000 +0200 +++ mod/src/RCF/RcfSession.cpp 2014-10-19 17:56:56.000000000 +0200 @@ -58,7 +58,7 @@ mCloseSessionAfterWrite(), mPingTimestamp(), mPingIntervalMs(), - mTouchTimestamp(0), + mTouchTimestamp(), mWritingPingBack(false), mpParameters(), mParmsVec(1+15), // return value + max 15 arguments @@ -175,6 +175,9 @@ SessionStatePtr sessionStatePtr = getSessionState().shared_from_this(); sessionStatePtr->setEnableReconnect(false); sessionStatePtr->postClose(); + + Lock lock(mMutex); + mTouchTimestamp = boost::none; } bool RcfSession::hasDefaultServerStub() @@ -327,7 +330,7 @@ mPingIntervalMs = pingIntervalMs; } - boost::uint32_t RcfSession::getTouchTimestamp() + boost::optional RcfSession::getTouchTimestamp() { Lock lock(mMutex); return mTouchTimestamp; diff -Naur org/src/RCF/SessionTimeoutService.cpp mod/src/RCF/SessionTimeoutService.cpp --- org/src/RCF/SessionTimeoutService.cpp 2013-04-11 10:31:15.000000000 +0200 +++ mod/src/RCF/SessionTimeoutService.cpp 2014-10-19 17:43:15.000000000 +0200 @@ -75,10 +75,10 @@ RcfSessionPtr rcfSessionPtr = sessionStatePtr->getSessionPtr(); if (rcfSessionPtr) { - boost::uint32_t lastTouched = rcfSessionPtr->getTouchTimestamp(); + boost::optional const lastTouched = rcfSessionPtr->getTouchTimestamp(); if (lastTouched) { - RCF::Timer lastTouchedTimer( lastTouched ); + RCF::Timer lastTouchedTimer( *lastTouched ); if (lastTouchedTimer.elapsed(mSessionTimeoutMs)) { rcfSessionPtr->disconnect();