summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/client/ConnectionHandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/qpid/client/ConnectionHandler.cpp')
-rw-r--r--cpp/src/qpid/client/ConnectionHandler.cpp16
1 files changed, 11 insertions, 5 deletions
diff --git a/cpp/src/qpid/client/ConnectionHandler.cpp b/cpp/src/qpid/client/ConnectionHandler.cpp
index cbdeff9cff..df84a98811 100644
--- a/cpp/src/qpid/client/ConnectionHandler.cpp
+++ b/cpp/src/qpid/client/ConnectionHandler.cpp
@@ -102,12 +102,18 @@ void ConnectionHandler::waitForOpen()
void ConnectionHandler::close()
{
- if (getState() != OPEN) {
- throw Exception("Connection not open");
+ switch (getState()) {
+ case NEGOTIATING:
+ case OPENING:
+ setState(FAILED);
+ break;
+ case OPEN:
+ setState(CLOSING);
+ send(ConnectionCloseBody(version, 200, OK, 0, 0));
+ waitFor(CLOSED);
+ break;
+ // Nothing to do for CLOSING, CLOSED, FAILED or NOT_STARTED
}
- setState(CLOSING);
- send(ConnectionCloseBody(version, 200, OK, 0, 0));
- waitFor(CLOSED);
}
void ConnectionHandler::send(const framing::AMQBody& body)