diff options
Diffstat (limited to 'cpp/src/qpid/client/ConnectionHandler.cpp')
| -rw-r--r-- | cpp/src/qpid/client/ConnectionHandler.cpp | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/cpp/src/qpid/client/ConnectionHandler.cpp b/cpp/src/qpid/client/ConnectionHandler.cpp index 3d338af920..9b2f662c8e 100644 --- a/cpp/src/qpid/client/ConnectionHandler.cpp +++ b/cpp/src/qpid/client/ConnectionHandler.cpp @@ -147,11 +147,15 @@ void ConnectionHandler::close() fail("Connection closed before it was established"); break; case OPEN: - setState(CLOSING); - proxy.close(200, OK); - waitFor(FINISHED); + if (setState(CLOSING, OPEN)) { + proxy.close(200, OK); + waitFor(FINISHED);//FINISHED = CLOSED or FAILED + } + //else, state was changed from open after we checked, can only + //change to failed or closed, so nothing to do break; - // Nothing to do for CLOSING, CLOSED, FAILED or NOT_STARTED + + // Nothing to do if already CLOSING, CLOSED, FAILED or if NOT_STARTED } } |
