summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/client/StateManager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/qpid/client/StateManager.cpp')
-rw-r--r--cpp/src/qpid/client/StateManager.cpp20
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)
{