Author: gsim
Date: Mon May 23 13:20:01 2016
New Revision: 1745195

URL: http://svn.apache.org/viewvc?rev=1745195&view=rev
Log:
QPID-7234: check handler is not null (as it will be when releasing unused 
prefetch on close)

Modified:
    qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/IncomingMessages.cpp
    qpid/trunk/qpid/cpp/src/tests/MessagingSessionTests.cpp

Modified: qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/IncomingMessages.cpp
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/IncomingMessages.cpp?rev=1745195&r1=1745194&r2=1745195&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/IncomingMessages.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/IncomingMessages.cpp Mon May 
23 13:20:01 2016
@@ -284,7 +284,7 @@ IncomingMessages::ProcessState IncomingM
         for (Duration timeout = duration; pop(content, timeout); timeout = 
Duration(AbsTime::now(), deadline)) {
             if (content->isA<MessageTransferBody>()) {
                 MessageTransfer transfer(content, *this);
-                if (transfer.checkExpired() && handler->expire(transfer)) {
+                if (handler && transfer.checkExpired() && 
handler->expire(transfer)) {
                     QPID_LOG(debug, "Expired received transfer: " << 
*content->getMethod());
                 } else if (handler && handler->accept(transfer)) {
                     QPID_LOG(debug, "Delivered " << *content->getMethod() << " 
"

Modified: qpid/trunk/qpid/cpp/src/tests/MessagingSessionTests.cpp
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/tests/MessagingSessionTests.cpp?rev=1745195&r1=1745194&r2=1745195&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/tests/MessagingSessionTests.cpp (original)
+++ qpid/trunk/qpid/cpp/src/tests/MessagingSessionTests.cpp Mon May 23 13:20:01 
2016
@@ -1562,6 +1562,27 @@ QPID_AUTO_TEST_CASE(testClientExpiration
     BOOST_CHECK_EQUAL(b_count, 50);
 }
 
+QPID_AUTO_TEST_CASE(testExpiredPrefetchOnClose)
+{
+    QueueFixture fix;
+    Receiver receiver = fix.session.createReceiver(fix.queue);
+    Session other = fix.connection.createSession();
+    Receiver receiver2 = other.createReceiver("amq.fanout");
+    receiver.setCapacity(500);
+    Sender sender = fix.session.createSender(fix.queue);
+    for (uint i = 0; i < 500; ++i) {
+        Message msg((boost::format("a_%1%") % (i+1)).str());
+       msg.setSubject("a");
+       msg.setTtl(Duration(5));
+        sender.send(msg);
+    }
+    Sender sender2 = other.createSender("amq.fanout");
+    sender2.send(Message("done"));
+    BOOST_CHECK_EQUAL(receiver2.fetch().getContent(), "done");
+    qpid::sys::usleep(qpid::sys::TIME_MSEC*5);//sorry Alan, I can't see any 
way to avoid a sleep; need to ensure messages in prefetch have expired 
+    receiver.close();
+}
+
 QPID_AUTO_TEST_CASE(testPriorityRingEviction)
 {
     MessagingFixture fix;



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to