diff options
| author | Ken Giusti <kgiusti@apache.org> | 2015-08-18 13:29:56 +0000 |
|---|---|---|
| committer | Ken Giusti <kgiusti@apache.org> | 2015-08-18 13:29:56 +0000 |
| commit | c2e8abd958add91b7e99163193d2fe5b65ab9b6e (patch) | |
| tree | 381615e08d3c474367ab20132a19a5dda6bc8dca /qpid/cpp/src | |
| parent | ce527fbfdfe99ec862e01073c9b524c186f47e2b (diff) | |
| download | qpid-python-c2e8abd958add91b7e99163193d2fe5b65ab9b6e.tar.gz | |
QPID-6698: use the monotonic clock for AMQP 1.0 idle timeout
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1696415 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp/src')
| -rw-r--r-- | qpid/cpp/src/qpid/broker/amqp/Connection.cpp | 8 | ||||
| -rw-r--r-- | qpid/cpp/src/qpid/messaging/amqp/ConnectionContext.cpp | 9 |
2 files changed, 13 insertions, 4 deletions
diff --git a/qpid/cpp/src/qpid/broker/amqp/Connection.cpp b/qpid/cpp/src/qpid/broker/amqp/Connection.cpp index e4fce784f1..abe3f8d1f9 100644 --- a/qpid/cpp/src/qpid/broker/amqp/Connection.cpp +++ b/qpid/cpp/src/qpid/broker/amqp/Connection.cpp @@ -209,7 +209,9 @@ size_t Connection::decode(const char* buffer, size_t size) 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; } diff --git a/qpid/cpp/src/qpid/messaging/amqp/ConnectionContext.cpp b/qpid/cpp/src/qpid/messaging/amqp/ConnectionContext.cpp index c519c05d71..bb0d32e333 100644 --- a/qpid/cpp/src/qpid/messaging/amqp/ConnectionContext.cpp +++ b/qpid/cpp/src/qpid/messaging/amqp/ConnectionContext.cpp @@ -821,7 +821,9 @@ std::size_t ConnectionContext::decodePlain(const char* buffer, std::size_t size) } } 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::encodePlain(char* buffer, std::size_t size) 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() |
