summaryrefslogtreecommitdiff
path: root/qpid/cpp/src
diff options
context:
space:
mode:
authorKen Giusti <kgiusti@apache.org>2015-08-18 13:29:56 +0000
committerKen Giusti <kgiusti@apache.org>2015-08-18 13:29:56 +0000
commitc2e8abd958add91b7e99163193d2fe5b65ab9b6e (patch)
tree381615e08d3c474367ab20132a19a5dda6bc8dca /qpid/cpp/src
parentce527fbfdfe99ec862e01073c9b524c186f47e2b (diff)
downloadqpid-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.cpp8
-rw-r--r--qpid/cpp/src/qpid/messaging/amqp/ConnectionContext.cpp9
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()