You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by gs...@apache.org on 2008/07/25 12:24:53 UTC

svn commit: r679748 - in /incubator/qpid/branches/qpid.0-10/cpp/src: qpid/client/SubscriptionManager.cpp tests/ClientSessionTest.cpp

Author: gsim
Date: Fri Jul 25 03:24:53 2008
New Revision: 679748

URL: http://svn.apache.org/viewvc?rev=679748&view=rev
Log:
Merged fix to SubscriptionManager (was r679739)


Modified:
    incubator/qpid/branches/qpid.0-10/cpp/src/qpid/client/SubscriptionManager.cpp
    incubator/qpid/branches/qpid.0-10/cpp/src/tests/ClientSessionTest.cpp

Modified: incubator/qpid/branches/qpid.0-10/cpp/src/qpid/client/SubscriptionManager.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/qpid.0-10/cpp/src/qpid/client/SubscriptionManager.cpp?rev=679748&r1=679747&r2=679748&view=diff
==============================================================================
--- incubator/qpid/branches/qpid.0-10/cpp/src/qpid/client/SubscriptionManager.cpp (original)
+++ incubator/qpid/branches/qpid.0-10/cpp/src/qpid/client/SubscriptionManager.cpp Fri Jul 25 03:24:53 2008
@@ -134,8 +134,11 @@
     std::string unique = framing::Uuid(true).str();
     subscribe(lq, queue, FlowControl::messageCredit(1), unique);
     AutoCancel ac(*this, unique);
+    //first wait for message to be delivered if a timeout has been specified
+    if (timeout && lq.get(result, timeout)) return true;
+    //make sure message is not on queue before final check
     sync(session).messageFlush(unique);
-    return lq.get(result, timeout);
+    return lq.get(result, 0);
 }
 
 }} // namespace qpid::client

Modified: incubator/qpid/branches/qpid.0-10/cpp/src/tests/ClientSessionTest.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/qpid.0-10/cpp/src/tests/ClientSessionTest.cpp?rev=679748&r1=679747&r2=679748&view=diff
==============================================================================
--- incubator/qpid/branches/qpid.0-10/cpp/src/tests/ClientSessionTest.cpp (original)
+++ incubator/qpid/branches/qpid.0-10/cpp/src/tests/ClientSessionTest.cpp Fri Jul 25 03:24:53 2008
@@ -41,6 +41,7 @@
 using namespace qpid::framing;
 using namespace qpid;
 using qpid::sys::Monitor;
+using qpid::sys::Thread;
 using qpid::sys::TIME_SEC;
 using std::string;
 using std::cout;
@@ -238,6 +239,19 @@
     BOOST_CHECK_EQUAL("foo2", lq.pop().getData());    
 }
 
+struct DelayedTransfer : sys::Runnable
+{
+    ClientSessionFixture& fixture;
+
+    DelayedTransfer(ClientSessionFixture& f) : fixture(f) {}
+
+    void run()
+    {
+        sleep(1);
+        fixture.session.messageTransfer(content=Message("foo2", "getq"));
+    }
+};
+
 QPID_AUTO_TEST_CASE(testGet) {
     ClientSessionFixture fix;
     fix.session.queueDeclare(queue="getq", exclusive=true, autoDelete=true);
@@ -249,6 +263,12 @@
     BOOST_CHECK(fix.subs.get(got, "getq", TIME_SEC));
     BOOST_CHECK_EQUAL("foo1", got.getData());
     BOOST_CHECK(!fix.subs.get(got, "getq"));
+    DelayedTransfer sender(fix);
+    Thread t(sender);
+    //test timed get where message shows up after a short delay
+    BOOST_CHECK(fix.subs.get(got, "getq", 5*TIME_SEC));
+    BOOST_CHECK_EQUAL("foo2", got.getData());    
+    t.join();
 }
 
 QPID_AUTO_TEST_SUITE_END()