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 2014/09/30 16:01:42 UTC

svn commit: r1628444 - /qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/IncomingMessages.cpp

Author: gsim
Date: Tue Sep 30 14:01:41 2014
New Revision: 1628444

URL: http://svn.apache.org/r1628444
Log:
QPID-6127: avoid using negative durations with sys::BlockingQueue.pop() as it will not throw when expected

Modified:
    qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/IncomingMessages.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=1628444&r1=1628443&r2=1628444&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 Tue Sep 30 14:01:41 2014
@@ -126,6 +126,24 @@ void IncomingMessages::setSession(qpid::
     acceptTracker.reset();
 }
 
+namespace {
+qpid::sys::Duration get_duration(qpid::sys::Duration timeout, qpid::sys::AbsTime deadline)
+{
+    if (timeout == qpid::sys::TIME_INFINITE) {
+        return qpid::sys::TIME_INFINITE;
+    } else if (timeout == 0) {
+        return 0;
+    } else {
+        qpid::sys::AbsTime n = AbsTime::now();
+        if (n < deadline) {
+            return qpid::sys::Duration(n, deadline);
+        } else {
+            return 0;
+        }
+    }
+}
+}
+
 bool IncomingMessages::get(Handler& handler, qpid::sys::Duration timeout)
 {
     sys::Mutex::ScopedLock l(lock);
@@ -152,7 +170,7 @@ bool IncomingMessages::get(Handler& hand
             ScopedRelease release(inUse, lock);
             sys::Mutex::ScopedUnlock l(lock);
             //wait for suitable new message to arrive
-            if (process(&handler, timeout == qpid::sys::TIME_INFINITE ? qpid::sys::TIME_INFINITE : qpid::sys::Duration(AbsTime::now(), deadline))) {
+            if (process(&handler, get_duration(timeout, deadline))) {
                 return true;
             }
         }
@@ -184,7 +202,7 @@ bool IncomingMessages::getNextDestinatio
             ScopedRelease release(inUse, lock);
             sys::Mutex::ScopedUnlock l(lock);
             //wait for an incoming message
-            wait(timeout == qpid::sys::TIME_INFINITE ? qpid::sys::TIME_INFINITE : qpid::sys::Duration(AbsTime::now(), deadline));
+            wait(get_duration(timeout, deadline));
         }
         if (!(AbsTime::now() < deadline)) break;
     }



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org