Description of problem: Calling Session::nextReceiver() with a duration of IMMEDIATE will always return null, even if there are incoming messages waiting. This bug was introduced as part of the fix for bug 958895. Version-Release number of selected component (if applicable): qpid-0.24, mrg 2.3.3, qpid-0.28 How reproducible: Easily Steps to Reproduce: 1. put some messages in a queue 2. have a program that creates a receiver for the queue, sets a non-zero capacity, then loops until nextReceiver(Duration::IMMEDIATE returns a non-null receiver), e.g.: ssn.createReceiver("my-queue").setCapacity(1); Receiver next; while (ssn.nextReceiver(Duration::IMMEDIATE)) {} next.get(Duration::IMMEDIATE) Actual results: The while loop never returns, even though there are messages on the queue Expected results: The while loop exits once the broker has sent out (a) message(s) Additional info: It should be pointed out that using nextReceiver() with a Duration::IMMEDIATE value in this way is inefficient and rather odd. A much better solution would be to specify some non-zero timeout. This would avoid the cpu usage of a 'busy wait' while in no way either increasing the actual time until the next receiver is obtained or the maximum theoretical time. Using nextReceiver() with a non-zero timeout also avoids this bug.
Code snippet above should read: ssn.createReceiver("my-queue").setCapacity(1); Receiver next; while (ssn.nextReceiver(next, Duration::IMMEDIATE)) {} next.get(Duration::IMMEDIATE); (i.e. the receiver handle to be set should be passed in to the nextReceiver() call).
Fixed upstream: https://svn.apache.org/r1617256
The commit above fixes one regression but introduces another. Need https://svn.apache.org/r1617924 also from upstream.
This fix was tested on RHEL 6.5 i686 && x86_64 with following packages: qpid-cpp-server-0.22-47.el6 qpid-cpp-server-rdma-0.22-47.el6 qpid-cpp-server-xml-0.22-47.el6 qpid-cpp-client-0.22-47.el6 qpid-cpp-client-devel-0.22-47.el6 qpid-cpp-client-rdma-0.22-47.el6 qpid-cpp-server-ha-0.22-47.el6 qpid-cpp-server-linearstore-0.22-47.el6 qpid-cpp-debuginfo-0.22-47.el6 qpid-cpp-server-devel-0.22-47.el6 qpid-cpp-client-devel-docs-0.22-47.el6 works as expected.
Since the problem described in this bug report should be resolved in a recent advisory, it has been closed with a resolution of ERRATA. For information on the advisory, and where to find the updated files, follow the link below. If the solution does not work for you, open a new bug report. http://rhn.redhat.com/errata/RHEA-2014-1296.html