summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/client/amqp0_10/IncomingMessages.cpp
diff options
context:
space:
mode:
authorAlan Conway <aconway@apache.org>2010-05-14 20:55:51 +0000
committerAlan Conway <aconway@apache.org>2010-05-14 20:55:51 +0000
commit94c33a9ea95ee56bb9e12018d053bfe68d86927f (patch)
tree2ccf9bf12be0e1e882b1886b4348fc1eb0e258bc /cpp/src/qpid/client/amqp0_10/IncomingMessages.cpp
parent59688aba91d34168242e1cb0bdcd20f50232b362 (diff)
downloadqpid-python-94c33a9ea95ee56bb9e12018d053bfe68d86927f.tar.gz
Fix errors when new API Receiver is closed while in use.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@944461 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/client/amqp0_10/IncomingMessages.cpp')
-rw-r--r--cpp/src/qpid/client/amqp0_10/IncomingMessages.cpp27
1 files changed, 15 insertions, 12 deletions
diff --git a/cpp/src/qpid/client/amqp0_10/IncomingMessages.cpp b/cpp/src/qpid/client/amqp0_10/IncomingMessages.cpp
index b5d7bf78f4..cbf05fc521 100644
--- a/cpp/src/qpid/client/amqp0_10/IncomingMessages.cpp
+++ b/cpp/src/qpid/client/amqp0_10/IncomingMessages.cpp
@@ -186,22 +186,25 @@ bool IncomingMessages::process(Handler* handler, qpid::sys::Duration duration)
{
AbsTime deadline(AbsTime::now(), duration);
FrameSet::shared_ptr content;
- for (Duration timeout = duration; incoming->pop(content, timeout); timeout = Duration(AbsTime::now(), deadline)) {
- if (content->isA<MessageTransferBody>()) {
- MessageTransfer transfer(content, *this);
- if (handler && handler->accept(transfer)) {
- QPID_LOG(debug, "Delivered " << *content->getMethod());
- return true;
+ try {
+ for (Duration timeout = duration; incoming->pop(content, timeout); timeout = Duration(AbsTime::now(), deadline)) {
+ if (content->isA<MessageTransferBody>()) {
+ MessageTransfer transfer(content, *this);
+ if (handler && handler->accept(transfer)) {
+ QPID_LOG(debug, "Delivered " << *content->getMethod());
+ return true;
+ } else {
+ //received message for another destination, keep for later
+ QPID_LOG(debug, "Pushed " << *content->getMethod() << " to received queue");
+ sys::Mutex::ScopedLock l(lock);
+ received.push_back(content);
+ }
} else {
- //received message for another destination, keep for later
- QPID_LOG(debug, "Pushed " << *content->getMethod() << " to received queue");
- sys::Mutex::ScopedLock l(lock);
- received.push_back(content);
+ //TODO: handle other types of commands (e.g. message-accept, message-flow etc)
}
- } else {
- //TODO: handle other types of commands (e.g. message-accept, message-flow etc)
}
}
+ catch (const qpid::ClosedException&) {} // Just return false if queue closed.
return false;
}