From 91a4eda9bfa588f1d017c218ac2bcc9713338ef2 Mon Sep 17 00:00:00 2001 From: Gordon Sim Date: Fri, 20 Aug 2010 09:29:31 +0000 Subject: QPID-2817: on close, wait for at most the heartbeat interval (if specified) for close-ok response from broker git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@987429 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/src/qpid/client/StateManager.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'cpp/src/qpid/client/StateManager.cpp') diff --git a/cpp/src/qpid/client/StateManager.cpp b/cpp/src/qpid/client/StateManager.cpp index 5462e0fed4..839d92abdc 100644 --- a/cpp/src/qpid/client/StateManager.cpp +++ b/cpp/src/qpid/client/StateManager.cpp @@ -52,6 +52,26 @@ void StateManager::waitFor(std::set desired) } } +bool StateManager::waitFor(int desired, qpid::sys::Duration timeout) +{ + AbsTime end(now(), timeout); + Monitor::ScopedLock l(stateLock); + while (state != desired && now() < end) { + stateLock.wait(end); + } + return state == desired; +} + +bool StateManager::waitFor(std::set desired, qpid::sys::Duration timeout) +{ + AbsTime end(now(), timeout); + Monitor::ScopedLock l(stateLock); + while (desired.find(state) == desired.end() && now() < end) { + stateLock.wait(end); + } + return desired.find(state) != desired.end(); +} + void StateManager::setState(int s) { -- cgit v1.2.1