diff options
-rw-r--r-- | cpp/src/qpid/client/ConnectionImpl.cpp | 12 | ||||
-rw-r--r-- | cpp/src/qpid/client/ConnectionImpl.h | 2 | ||||
-rw-r--r-- | cpp/src/tests/ClientSessionTest.cpp | 15 |
3 files changed, 26 insertions, 3 deletions
diff --git a/cpp/src/qpid/client/ConnectionImpl.cpp b/cpp/src/qpid/client/ConnectionImpl.cpp index 22f10d3620..6dca4dcf21 100644 --- a/cpp/src/qpid/client/ConnectionImpl.cpp +++ b/cpp/src/qpid/client/ConnectionImpl.cpp @@ -40,7 +40,7 @@ ConnectionImpl::ConnectionImpl(framing::ProtocolVersion v, const ConnectionSetti handler(settings, v), connector(v, settings, this), version(v), - isClosed(false), + isClosed(true),//closed until successfully opened isClosing(false) { QPID_LOG(debug, "ConnectionImpl created for " << version); @@ -88,12 +88,20 @@ void ConnectionImpl::incoming(framing::AMQFrame& frame) s->in(frame); } +bool ConnectionImpl::isOpen() const +{ + return !isClosed && !isClosing; +} + + void ConnectionImpl::open(const std::string& host, int port) { QPID_LOG(info, "Connecting to " << host << ":" << port); connector.connect(host, port); connector.init(); - handler.waitForOpen(); + handler.waitForOpen(); + Mutex::ScopedLock l(lock); + isClosed = false; } void ConnectionImpl::idleIn() diff --git a/cpp/src/qpid/client/ConnectionImpl.h b/cpp/src/qpid/client/ConnectionImpl.h index 089e73335d..b02dda5af7 100644 --- a/cpp/src/qpid/client/ConnectionImpl.h +++ b/cpp/src/qpid/client/ConnectionImpl.h @@ -72,7 +72,7 @@ class ConnectionImpl : public Bounds, ~ConnectionImpl(); void open(const std::string& host, int port); - bool isOpen() const { return !isClosed && !isClosing; } + bool isOpen() const; void addSession(const boost::shared_ptr<SessionImpl>&); diff --git a/cpp/src/tests/ClientSessionTest.cpp b/cpp/src/tests/ClientSessionTest.cpp index 0475350d6a..505f3248a4 100644 --- a/cpp/src/tests/ClientSessionTest.cpp +++ b/cpp/src/tests/ClientSessionTest.cpp @@ -246,6 +246,21 @@ QPID_AUTO_TEST_CASE(testGet) { BOOST_CHECK_EQUAL("foo1", fix.subs.get("getq").getData()); } +QPID_AUTO_TEST_CASE(testOpenFailure) { + BrokerFixture b; + Connection c; + string host("unknowable-host"); + try { + c.open(host); + } catch (const Exception&) { + BOOST_CHECK(!c.isOpen()); + } + b.open(c); + BOOST_CHECK(c.isOpen()); + c.close(); + BOOST_CHECK(!c.isOpen()); +} + QPID_AUTO_TEST_SUITE_END() |