diff options
| author | Gordon Sim <gsim@apache.org> | 2013-06-28 12:23:15 +0000 |
|---|---|---|
| committer | Gordon Sim <gsim@apache.org> | 2013-06-28 12:23:15 +0000 |
| commit | 914b52c41d17046d4549cd7f9f55d3c356ff8de5 (patch) | |
| tree | b2e9e8cb600dff4d26c1092e14b8c48c69bfd67c /qpid/cpp | |
| parent | 379bae65559506f8b4c7d72b99f347023146e1b6 (diff) | |
| download | qpid-python-914b52c41d17046d4549cd7f9f55d3c356ff8de5.tar.gz | |
QPID-4966: ensure timeout is honoured while waiting of rmessages
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1497749 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp')
| -rw-r--r-- | qpid/cpp/src/qpid/messaging/amqp/ConnectionContext.cpp | 31 | ||||
| -rw-r--r-- | qpid/cpp/src/qpid/messaging/amqp/ConnectionContext.h | 5 |
2 files changed, 33 insertions, 3 deletions
diff --git a/qpid/cpp/src/qpid/messaging/amqp/ConnectionContext.cpp b/qpid/cpp/src/qpid/messaging/amqp/ConnectionContext.cpp index 4553ebddb3..72bba608d1 100644 --- a/qpid/cpp/src/qpid/messaging/amqp/ConnectionContext.cpp +++ b/qpid/cpp/src/qpid/messaging/amqp/ConnectionContext.cpp @@ -270,7 +270,7 @@ bool ConnectionContext::get(boost::shared_ptr<SessionContext> ssn, boost::shared pn_link_advance(lnk->receiver); return true; } else if (until > qpid::sys::now()) { - wait(ssn, lnk); + waitUntil(ssn, lnk, until); } else { return false; } @@ -427,9 +427,8 @@ pn_state_t REQUIRES_CLOSE = PN_LOCAL_ACTIVE | PN_REMOTE_CLOSED; pn_state_t IS_CLOSED = PN_LOCAL_CLOSED | PN_REMOTE_CLOSED; } -void ConnectionContext::wait() +void ConnectionContext::check() { - lock.wait(); if (state == DISCONNECTED) { throw qpid::messaging::TransportFailure("Disconnected"); } @@ -438,6 +437,17 @@ void ConnectionContext::wait() throw qpid::messaging::ConnectionError("Connection closed by peer"); } } + +void ConnectionContext::wait() +{ + lock.wait(); + check(); +} +void ConnectionContext::waitUntil(qpid::sys::AbsTime until) +{ + lock.wait(until); + check(); +} void ConnectionContext::wait(boost::shared_ptr<SessionContext> ssn) { wait(); @@ -453,6 +463,21 @@ void ConnectionContext::wait(boost::shared_ptr<SessionContext> ssn, boost::share wait(); checkClosed(ssn, lnk); } +void ConnectionContext::waitUntil(boost::shared_ptr<SessionContext> ssn, qpid::sys::AbsTime until) +{ + waitUntil(until); + checkClosed(ssn); +} +void ConnectionContext::waitUntil(boost::shared_ptr<SessionContext> ssn, boost::shared_ptr<ReceiverContext> lnk, qpid::sys::AbsTime until) +{ + waitUntil(until); + checkClosed(ssn, lnk); +} +void ConnectionContext::waitUntil(boost::shared_ptr<SessionContext> ssn, boost::shared_ptr<SenderContext> lnk, qpid::sys::AbsTime until) +{ + waitUntil(until); + checkClosed(ssn, lnk); +} void ConnectionContext::checkClosed(boost::shared_ptr<SessionContext> ssn) { if ((pn_session_state(ssn->session) & REQUIRES_CLOSE) == REQUIRES_CLOSE) { diff --git a/qpid/cpp/src/qpid/messaging/amqp/ConnectionContext.h b/qpid/cpp/src/qpid/messaging/amqp/ConnectionContext.h index 5627bd903d..37d73ea456 100644 --- a/qpid/cpp/src/qpid/messaging/amqp/ConnectionContext.h +++ b/qpid/cpp/src/qpid/messaging/amqp/ConnectionContext.h @@ -135,10 +135,15 @@ class ConnectionContext : public qpid::sys::ConnectionCodec, public qpid::messag }; CodecSwitch codecSwitch; + void check(); void wait(); + void waitUntil(qpid::sys::AbsTime until); void wait(boost::shared_ptr<SessionContext>); + void waitUntil(boost::shared_ptr<SessionContext>, qpid::sys::AbsTime until); void wait(boost::shared_ptr<SessionContext>, boost::shared_ptr<ReceiverContext>); void wait(boost::shared_ptr<SessionContext>, boost::shared_ptr<SenderContext>); + void waitUntil(boost::shared_ptr<SessionContext>, boost::shared_ptr<ReceiverContext>, qpid::sys::AbsTime until); + void waitUntil(boost::shared_ptr<SessionContext>, boost::shared_ptr<SenderContext>, qpid::sys::AbsTime until); void checkClosed(boost::shared_ptr<SessionContext>); void checkClosed(boost::shared_ptr<SessionContext>, boost::shared_ptr<ReceiverContext>); void checkClosed(boost::shared_ptr<SessionContext>, boost::shared_ptr<SenderContext>); |
