summaryrefslogtreecommitdiff
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
commit671388c4035e160b4ddd4c022fb1028e4c28e564 (patch)
treefb931cdba352fe9ffae3bba4595284acd6b16df9
parenta2bfe45d88da47239a974165f9a14dceb21670e4 (diff)
downloadqpid-python-671388c4035e160b4ddd4c022fb1028e4c28e564.tar.gz
Add state constraint annotations to Rdma::AsynchIO;
Simplify state machine slightly git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1021831 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--qpid/cpp/src/qpid/sys/rdma/RdmaIO.cpp18
1 files changed, 14 insertions, 4 deletions
diff --git a/qpid/cpp/src/qpid/sys/rdma/RdmaIO.cpp b/qpid/cpp/src/qpid/sys/rdma/RdmaIO.cpp
index 1caa9b7e72..bddb0f8782 100644
--- a/qpid/cpp/src/qpid/sys/rdma/RdmaIO.cpp
+++ b/qpid/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: