diff options
Diffstat (limited to 'cpp/src/qpid/client/Connector.cpp')
-rw-r--r-- | cpp/src/qpid/client/Connector.cpp | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/cpp/src/qpid/client/Connector.cpp b/cpp/src/qpid/client/Connector.cpp index 3e77ff2fe0..946bf0138d 100644 --- a/cpp/src/qpid/client/Connector.cpp +++ b/cpp/src/qpid/client/Connector.cpp @@ -40,6 +40,7 @@ #include <deque> #include <boost/bind.hpp> #include <boost/format.hpp> +#include <boost/weak_ptr.hpp> namespace qpid { namespace client { @@ -100,6 +101,7 @@ class TCPConnector : public Connector, public sys::Codec framing::ProtocolVersion version; bool initiated; bool closed; + bool joined; sys::ShutdownHandler* shutdownHandler; framing::InputHandler* input; @@ -123,6 +125,8 @@ class TCPConnector : public Connector, public sys::Codec void writeDataBlock(const framing::AMQDataBlock& data); void eof(qpid::sys::AsynchIO&); + boost::weak_ptr<ConnectionImpl> impl; + void connect(const std::string& host, int port); void init(); void close(); @@ -176,9 +180,11 @@ TCPConnector::TCPConnector(Poller::shared_ptr p, version(ver), initiated(false), closed(true), + joined(true), shutdownHandler(0), aio(0), - poller(p) + poller(p), + impl(cimpl->shared_from_this()) { QPID_LOG(debug, "TCPConnector created for " << version.toString()); settings.configureSocket(socket); @@ -211,8 +217,10 @@ void TCPConnector::connect(const std::string& host, int port){ void TCPConnector::init(){ Mutex::ScopedLock l(lock); + assert(joined); ProtocolInitiation init(version); writeDataBlock(init); + joined = false; for (int i = 0; i < 32; i++) { aio->queueReadBuffer(new Buff(maxFrameSize)); } |