You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by kg...@apache.org on 2015/08/18 15:29:56 UTC

svn commit: r1696415 - in /qpid/trunk/qpid/cpp/src/qpid: broker/amqp/Connection.cpp messaging/amqp/ConnectionContext.cpp

Author: kgiusti
Date: Tue Aug 18 13:29:56 2015
New Revision: 1696415

URL: http://svn.apache.org/r1696415
Log:
QPID-6698: use the monotonic clock for AMQP 1.0 idle timeout

Modified:
    qpid/trunk/qpid/cpp/src/qpid/broker/amqp/Connection.cpp
    qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/ConnectionContext.cpp

Modified: qpid/trunk/qpid/cpp/src/qpid/broker/amqp/Connection.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/amqp/Connection.cpp?rev=1696415&r1=1696414&r2=1696415&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/amqp/Connection.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/amqp/Connection.cpp Tue Aug 18 13:29:56 2015
@@ -209,7 +209,9 @@ size_t Connection::decode(const char* bu
             pn_condition_set_description(error, e.what());
             close();
         }
-        pn_transport_tick(transport, qpid::sys::Duration::FromEpoch() / qpid::sys::TIME_MSEC);
+        // QPID-6698: don't use wallclock here, use monotonic clock
+        int64_t now = qpid::sys::Duration(qpid::sys::ZERO, qpid::sys::AbsTime::now());
+        pn_transport_tick(transport, now / int64_t(qpid::sys::TIME_MSEC));
         if (!haveOutput) {
             haveOutput = true;
             out.activateOutput();
@@ -317,7 +319,9 @@ bool Connection::canEncode()
         QPID_LOG(info, "Connection " << id << " has been closed locally");
     }
     if (ioRequested.valueCompareAndSwap(true, false)) haveOutput = true;
-    pn_transport_tick(transport, qpid::sys::Duration::FromEpoch() / qpid::sys::TIME_MSEC);
+    // QPID-6698: don't use wallclock here, use monotonic clock
+    int64_t now = qpid::sys::Duration(qpid::sys::ZERO, qpid::sys::AbsTime::now());
+    pn_transport_tick(transport, (now / int64_t(qpid::sys::TIME_MSEC)));
     QPID_LOG_CAT(trace, network, id << " canEncode(): " << haveOutput)
     return haveOutput;
 }

Modified: qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/ConnectionContext.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/ConnectionContext.cpp?rev=1696415&r1=1696414&r2=1696415&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/ConnectionContext.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/ConnectionContext.cpp Tue Aug 18 13:29:56 2015
@@ -821,7 +821,9 @@ std::size_t ConnectionContext::decodePla
             }
         }
         QPID_LOG_CAT(debug, network, id << " decoded " << n << " bytes from " << size)
-        pn_transport_tick(engine, qpid::sys::Duration::FromEpoch() / qpid::sys::TIME_MSEC);
+        // QPID-6698: don't use wallclock here, use monotonic clock
+        int64_t now = qpid::sys::Duration(qpid::sys::ZERO, qpid::sys::AbsTime::now());
+        pn_transport_tick(engine, now / int64_t(qpid::sys::TIME_MSEC));
         lock.notifyAll();
         return n;
     } else if (n == PN_ERR) {
@@ -877,7 +879,10 @@ std::size_t ConnectionContext::encodePla
 bool ConnectionContext::canEncodePlain()
 {
     sys::Monitor::ScopedLock l(lock);
-    pn_transport_tick(engine, qpid::sys::Duration::FromEpoch() / qpid::sys::TIME_MSEC);
+
+    // QPID-6698: don't use wallclock here, use monotonic clock
+    int64_t now = qpid::sys::Duration(qpid::sys::ZERO, qpid::sys::AbsTime::now());
+    pn_transport_tick(engine, now / int64_t(qpid::sys::TIME_MSEC));
     return (haveOutput || pn_transport_pending(engine)) && state == CONNECTED;
 }
 void ConnectionContext::closed()



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org