Author: gsim
Date: Tue Jul 28 11:06:41 2015
New Revision: 1693067
URL: http://svn.apache.org/r1693067
Log:
QPID-6661: address some anomalies with heartbeats on the AMQP 1.0 path
* the ticker driving heartbeats are restarted whenever data is sent out
* the client checks whether there is data pending in determining whether it
can encode
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=1693067&r1=1693066&r2=1693067&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/amqp/Connection.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/amqp/Connection.cpp Tue Jul 28 11:06:41
2015
@@ -234,6 +234,7 @@ size_t Connection::encode(char* buffer,
if (n > 0) {
QPID_LOG_CAT(debug, network, id << " encoded " << n << " bytes from "
<< size)
haveOutput = true;
+ if (ticker) ticker->restart();
return n;
} else if (n == PN_EOS) {
haveOutput = false;
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=1693067&r1=1693066&r2=1693067&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/ConnectionContext.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/ConnectionContext.cpp Tue Jul
28 11:06:41 2015
@@ -852,6 +852,7 @@ std::size_t ConnectionContext::encodePla
QPID_LOG_CAT(debug, network, id << " encoded " << n << " bytes from "
<< size)
haveOutput = true;
if (notifyOnWrite) lock.notifyAll();
+ if (ticker) ticker->restart();
return n;
} else if (n == PN_ERR) {
std::string error;
@@ -877,7 +878,7 @@ bool ConnectionContext::canEncodePlain()
{
sys::Monitor::ScopedLock l(lock);
pn_transport_tick(engine, qpid::sys::Duration::FromEpoch() /
qpid::sys::TIME_MSEC);
- return haveOutput && state == CONNECTED;
+ return (haveOutput || pn_transport_pending(engine)) && state == CONNECTED;
}
void ConnectionContext::closed()
{
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]