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]

Reply via email to