summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
authorAndrew Stitcher <astitcher@apache.org>2010-10-12 16:34:31 +0000
committerAndrew Stitcher <astitcher@apache.org>2010-10-12 16:34:31 +0000
commitb752b045783652ba392de9a8c8c2871114d45919 (patch)
tree4c0b9d1f56492f169d268ba7f105c838f4066224 /cpp/src
parent8f2c46ab09f89e1bd4d294c3a7289dbffedeac6b (diff)
downloadqpid-python-b752b045783652ba392de9a8c8c2871114d45919.tar.gz
Add state constraint annotations to Rdma::AsynchIO;
Simplify state machine slightly git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1021831 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/qpid/sys/rdma/RdmaIO.cpp18
1 files changed, 14 insertions, 4 deletions
diff --git a/cpp/src/qpid/sys/rdma/RdmaIO.cpp b/cpp/src/qpid/sys/rdma/RdmaIO.cpp
index 1caa9b7e72..bddb0f8782 100644
--- a/cpp/src/qpid/sys/rdma/RdmaIO.cpp
+++ b/cpp/src/qpid/sys/rdma/RdmaIO.cpp
@@ -89,6 +89,9 @@ namespace Rdma {
dataHandle.startWatch(poller);
}
+ // State constraints
+ // On entry: None
+ // On exit: STOPPED
// Mark for deletion/Delete this object when we have no outstanding writes
void AsynchIO::stop(NotifyCallback nc) {
ScopedLock<Mutex> l(stateLock);
@@ -142,12 +145,15 @@ namespace Rdma {
}
}
+ // State constraints
+ // On entry: None
+ // On exit: NOTIFY_PENDING || STOPPED
void AsynchIO::notifyPendingWrite() {
ScopedLock<Mutex> l(stateLock);
switch (state) {
case IDLE:
dataHandle.call(pendingWriteAction);
- break;
+ // Fall Thru
case NOTIFY:
state = NOTIFY_PENDING;
break;
@@ -157,6 +163,9 @@ namespace Rdma {
}
}
+ // State constraints
+ // On entry: IDLE || STOPPED
+ // On exit: IDLE || STOPPED
void AsynchIO::dataEvent() {
{
ScopedLock<Mutex> l(stateLock);
@@ -170,7 +179,10 @@ namespace Rdma {
writeEvent();
}
- void AsynchIO::writeEvent() {
+ // State constraints
+ // On entry: NOTIFY_PENDING || STOPPED
+ // On exit: IDLE || STOPPED
+ void AsynchIO::writeEvent() {
State newState;
do {
{
@@ -192,8 +204,6 @@ namespace Rdma {
newState = state;
switch (newState) {
case NOTIFY_PENDING:
- state = NOTIFY;
- break;
case STOPPED:
break;
default: