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.cpp14
1 files changed, 13 insertions, 1 deletions
diff --git a/cpp/src/qpid/client/StateManager.cpp b/cpp/src/qpid/client/StateManager.cpp
index 0cb3c6b9d4..5462e0fed4 100644
--- a/cpp/src/qpid/client/StateManager.cpp
+++ b/cpp/src/qpid/client/StateManager.cpp
@@ -19,7 +19,7 @@
*
*/
-#include "StateManager.h"
+#include "qpid/client/StateManager.h"
#include "qpid/framing/amqp_framing.h"
using namespace qpid::client;
@@ -60,6 +60,18 @@ void StateManager::setState(int s)
stateLock.notifyAll();
}
+bool StateManager::setState(int s, int expected)
+{
+ Monitor::ScopedLock l(stateLock);
+ if (state == expected) {
+ state = s;
+ stateLock.notifyAll();
+ return true;
+ } else {
+ return false;
+ }
+}
+
int StateManager::getState() const
{
Monitor::ScopedLock l(stateLock);