diff options
| author | Alan Conway <aconway@apache.org> | 2010-05-14 20:55:51 +0000 |
|---|---|---|
| committer | Alan Conway <aconway@apache.org> | 2010-05-14 20:55:51 +0000 |
| commit | 94c33a9ea95ee56bb9e12018d053bfe68d86927f (patch) | |
| tree | 2ccf9bf12be0e1e882b1886b4348fc1eb0e258bc /cpp/src/qpid/client/amqp0_10/IncomingMessages.cpp | |
| parent | 59688aba91d34168242e1cb0bdcd20f50232b362 (diff) | |
| download | qpid-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.cpp | 27 |
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; } |
