diff options
Diffstat (limited to 'cpp/lib/client/ResponseHandler.cpp')
| -rw-r--r-- | cpp/lib/client/ResponseHandler.cpp | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/cpp/lib/client/ResponseHandler.cpp b/cpp/lib/client/ResponseHandler.cpp index ac8b4a9ced..68c7e52013 100644 --- a/cpp/lib/client/ResponseHandler.cpp +++ b/cpp/lib/client/ResponseHandler.cpp @@ -29,28 +29,28 @@ qpid::client::ResponseHandler::ResponseHandler() : waiting(false){} qpid::client::ResponseHandler::~ResponseHandler(){} bool qpid::client::ResponseHandler::validate(const qpid::framing::AMQMethodBody& expected){ - return expected.match(response.get()); + return response != 0 && expected.match(response.get()); } void qpid::client::ResponseHandler::waitForResponse(){ Monitor::ScopedLock l(monitor); - if(waiting){ + while (waiting) monitor.wait(); - } } -void qpid::client::ResponseHandler::signalResponse(qpid::framing::AMQMethodBody::shared_ptr _response){ - response = _response; +void qpid::client::ResponseHandler::signalResponse( + qpid::framing::AMQMethodBody::shared_ptr _response) +{ Monitor::ScopedLock l(monitor); + response = _response; waiting = false; monitor.notify(); } void qpid::client::ResponseHandler::receive(const qpid::framing::AMQMethodBody& expected){ Monitor::ScopedLock l(monitor); - if(waiting){ + while (waiting) monitor.wait(); - } if(!validate(expected)){ THROW_QPID_ERROR(PROTOCOL_ERROR, "Protocol Error"); } |
