diff options
Diffstat (limited to 'cpp/src/qpid/client/StateManager.cpp')
-rw-r--r-- | cpp/src/qpid/client/StateManager.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
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<int> 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<int> 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) { |