diff options
author | Andrew Stitcher <astitcher@apache.org> | 2010-01-26 20:45:03 +0000 |
---|---|---|
committer | Andrew Stitcher <astitcher@apache.org> | 2010-01-26 20:45:03 +0000 |
commit | 832887152f0cfbb0ff1d9ca3d3c5624818ecc87d (patch) | |
tree | 70f94276df7fb709018d809bdf0f9f597f549d65 | |
parent | faeceaf81e73b23260d32503bc09e87f6ed2e735 (diff) | |
download | qpid-python-832887152f0cfbb0ff1d9ca3d3c5624818ecc87d.tar.gz |
Fix memory error in previous SocketAddress refactoring
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@903407 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | cpp/src/qpid/client/RdmaConnector.cpp | 8 | ||||
-rw-r--r-- | cpp/src/qpid/sys/RdmaIOPlugin.cpp | 11 | ||||
-rw-r--r-- | cpp/src/qpid/sys/rdma/RdmaClient.cpp | 7 | ||||
-rw-r--r-- | cpp/src/qpid/sys/rdma/RdmaIO.cpp | 16 | ||||
-rw-r--r-- | cpp/src/qpid/sys/rdma/RdmaIO.h | 12 | ||||
-rw-r--r-- | cpp/src/qpid/sys/rdma/RdmaServer.cpp | 6 | ||||
-rw-r--r-- | cpp/src/qpid/sys/rdma/rdma_wrap.h | 4 |
7 files changed, 27 insertions, 37 deletions
diff --git a/cpp/src/qpid/client/RdmaConnector.cpp b/cpp/src/qpid/client/RdmaConnector.cpp index d67a0fcb2e..fbf4e02f69 100644 --- a/cpp/src/qpid/client/RdmaConnector.cpp +++ b/cpp/src/qpid/client/RdmaConnector.cpp @@ -49,7 +49,7 @@ using namespace qpid::framing; using boost::format; using boost::str; - class RdmaConnector : public Connector, public sys::Codec +class RdmaConnector : public Connector, public sys::Codec { struct Buff; @@ -164,17 +164,17 @@ void RdmaConnector::connect(const std::string& host, int port){ Mutex::ScopedLock l(pollingLock); assert(!polling); - SocketAddress sa(host, boost::lexical_cast<std::string>(port)); Rdma::Connector* c = new Rdma::Connector( - sa, Rdma::ConnectionParams(maxFrameSize, Rdma::DEFAULT_WR_ENTRIES), boost::bind(&RdmaConnector::connected, this, poller, _1, _2), boost::bind(&RdmaConnector::connectionError, this, poller, _1, _2), boost::bind(&RdmaConnector::disconnected, this, poller, _1), boost::bind(&RdmaConnector::rejected, this, poller, _1, _2)); + polling = true; - c->start(poller); + SocketAddress sa(host, boost::lexical_cast<std::string>(port)); + c->start(poller, sa); } // The following only gets run when connected diff --git a/cpp/src/qpid/sys/RdmaIOPlugin.cpp b/cpp/src/qpid/sys/RdmaIOPlugin.cpp index bd19247124..b325931793 100644 --- a/cpp/src/qpid/sys/RdmaIOPlugin.cpp +++ b/cpp/src/qpid/sys/RdmaIOPlugin.cpp @@ -305,16 +305,16 @@ void RdmaIOProtocolFactory::accept(Poller::shared_ptr poller, ConnectionCodec::F sin.sin_port = htons(listeningPort); sin.sin_addr.s_addr = INADDR_ANY; - SocketAddress sa("",boost::lexical_cast<std::string>(listeningPort)); listener.reset( - new Rdma::Listener(sa, + new Rdma::Listener( Rdma::ConnectionParams(65536, Rdma::DEFAULT_WR_ENTRIES), boost::bind(&RdmaIOProtocolFactory::established, this, poller, _1), boost::bind(&RdmaIOProtocolFactory::connectionError, this, _1, _2), boost::bind(&RdmaIOProtocolFactory::disconnected, this, _1), boost::bind(&RdmaIOProtocolFactory::request, this, _1, _2, fact))); - listener->start(poller); + SocketAddress sa("",boost::lexical_cast<std::string>(listeningPort)); + listener->start(poller, sa); } // Only used for outgoing connections (in federation) @@ -337,17 +337,16 @@ void RdmaIOProtocolFactory::connect( ConnectionCodec::Factory* f, ConnectFailedCallback failed) { - SocketAddress sa(host, boost::lexical_cast<std::string>(port)); Rdma::Connector* c = new Rdma::Connector( - sa, Rdma::ConnectionParams(8000, Rdma::DEFAULT_WR_ENTRIES), boost::bind(&RdmaIOProtocolFactory::connected, this, poller, _1, _2, f), boost::bind(&RdmaIOProtocolFactory::connectionError, this, _1, _2), boost::bind(&RdmaIOProtocolFactory::disconnected, this, _1), boost::bind(&RdmaIOProtocolFactory::rejected, this, _1, _2, failed)); - c->start(poller); + SocketAddress sa(host, boost::lexical_cast<std::string>(port)); + c->start(poller, sa); } }} // namespace qpid::sys diff --git a/cpp/src/qpid/sys/rdma/RdmaClient.cpp b/cpp/src/qpid/sys/rdma/RdmaClient.cpp index d39f7885a5..78068cbd53 100644 --- a/cpp/src/qpid/sys/rdma/RdmaClient.cpp +++ b/cpp/src/qpid/sys/rdma/RdmaClient.cpp @@ -172,17 +172,16 @@ int main(int argc, char* argv[]) { boost::shared_ptr<Poller> p(new Poller()); Dispatcher d(p); - SocketAddress sa(host, port); - cout << "Connecting to: " << sa.asString() <<"\n"; Rdma::Connector c( - sa, Rdma::ConnectionParams(msgsize, Rdma::DEFAULT_WR_ENTRIES), boost::bind(&connected, p, _1, _2), boost::bind(&connectionError, p, _1, _2), boost::bind(&disconnected, p, _1), boost::bind(&rejected, p, _1, _2)); - c.start(p); + SocketAddress sa(host, port); + cout << "Connecting to: " << sa.asString() <<"\n"; + c.start(p, sa); d.run(); } catch (Rdma::Exception& e) { int err = e.getError(); diff --git a/cpp/src/qpid/sys/rdma/RdmaIO.cpp b/cpp/src/qpid/sys/rdma/RdmaIO.cpp index 8d06fccba1..588d459b65 100644 --- a/cpp/src/qpid/sys/rdma/RdmaIO.cpp +++ b/cpp/src/qpid/sys/rdma/RdmaIO.cpp @@ -452,8 +452,8 @@ namespace Rdma { handle.stopWatch(); } - void ConnectionManager::start(Poller::shared_ptr poller) { - startConnection(ci); + void ConnectionManager::start(Poller::shared_ptr poller, const qpid::sys::SocketAddress& addr) { + startConnection(ci, addr); handle.startWatch(poller); } @@ -462,7 +462,6 @@ namespace Rdma { } Listener::Listener( - const SocketAddress& src, const ConnectionParams& cp, EstablishedCallback ec, ErrorCallback errc, @@ -470,15 +469,14 @@ namespace Rdma { ConnectionRequestCallback crc ) : ConnectionManager(errc, dc), - src_addr(src), checkConnectionParams(cp), connectionRequestCallback(crc), establishedCallback(ec) { } - void Listener::startConnection(Connection::intrusive_ptr ci) { - ci->bind(src_addr); + void Listener::startConnection(Connection::intrusive_ptr ci, const qpid::sys::SocketAddress& addr) { + ci->bind(addr); ci->listen(); } @@ -542,7 +540,6 @@ namespace Rdma { } Connector::Connector( - const SocketAddress& dst, const ConnectionParams& cp, ConnectedCallback cc, ErrorCallback errc, @@ -550,15 +547,14 @@ namespace Rdma { RejectedCallback rc ) : ConnectionManager(errc, dc), - dst_addr(dst), connectionParams(cp), rejectedCallback(rc), connectedCallback(cc) { } - void Connector::startConnection(Connection::intrusive_ptr ci) { - ci->resolve_addr(dst_addr); + void Connector::startConnection(Connection::intrusive_ptr ci, const qpid::sys::SocketAddress& addr) { + ci->resolve_addr(addr); } void Connector::connectionEvent(Connection::intrusive_ptr ci) { diff --git a/cpp/src/qpid/sys/rdma/RdmaIO.h b/cpp/src/qpid/sys/rdma/RdmaIO.h index 12a1b98d24..711685031c 100644 --- a/cpp/src/qpid/sys/rdma/RdmaIO.h +++ b/cpp/src/qpid/sys/rdma/RdmaIO.h @@ -160,12 +160,12 @@ namespace Rdma { virtual ~ConnectionManager(); - void start(qpid::sys::Poller::shared_ptr poller); + void start(qpid::sys::Poller::shared_ptr polle, const qpid::sys::SocketAddress& addrr); private: void event(qpid::sys::DispatchHandle& handle); - virtual void startConnection(Connection::intrusive_ptr ci) = 0; + virtual void startConnection(Connection::intrusive_ptr ci, const qpid::sys::SocketAddress& addr) = 0; virtual void connectionEvent(Connection::intrusive_ptr ci) = 0; }; @@ -174,14 +174,12 @@ namespace Rdma { class Listener : public ConnectionManager { - qpid::sys::SocketAddress src_addr; ConnectionParams checkConnectionParams; ConnectionRequestCallback connectionRequestCallback; EstablishedCallback establishedCallback; public: Listener( - const qpid::sys::SocketAddress& src, const ConnectionParams& cp, EstablishedCallback ec, ErrorCallback errc, @@ -190,7 +188,7 @@ namespace Rdma { ); private: - void startConnection(Connection::intrusive_ptr ci); + void startConnection(Connection::intrusive_ptr ci, const qpid::sys::SocketAddress& addr); void connectionEvent(Connection::intrusive_ptr ci); }; @@ -199,14 +197,12 @@ namespace Rdma { class Connector : public ConnectionManager { - qpid::sys::SocketAddress dst_addr; ConnectionParams connectionParams; RejectedCallback rejectedCallback; ConnectedCallback connectedCallback; public: Connector( - const qpid::sys::SocketAddress& dst, const ConnectionParams& cp, ConnectedCallback cc, ErrorCallback errc, @@ -215,7 +211,7 @@ namespace Rdma { ); private: - void startConnection(Connection::intrusive_ptr ci); + void startConnection(Connection::intrusive_ptr ci, const qpid::sys::SocketAddress& addr); void connectionEvent(Connection::intrusive_ptr ci); }; } diff --git a/cpp/src/qpid/sys/rdma/RdmaServer.cpp b/cpp/src/qpid/sys/rdma/RdmaServer.cpp index 4c11ba23eb..137a1ef587 100644 --- a/cpp/src/qpid/sys/rdma/RdmaServer.cpp +++ b/cpp/src/qpid/sys/rdma/RdmaServer.cpp @@ -152,8 +152,7 @@ int main(int argc, char* argv[]) { boost::shared_ptr<Poller> p(new Poller()); Dispatcher d(p); - SocketAddress sa("", port); - Rdma::Listener a(sa, + Rdma::Listener a( Rdma::ConnectionParams(16384, Rdma::DEFAULT_WR_ENTRIES), boost::bind(connected, p, _1), connectionError, @@ -161,7 +160,8 @@ int main(int argc, char* argv[]) { connectionRequest); - a.start(p); + SocketAddress sa("", port); + a.start(p, sa); d.run(); } catch (Rdma::Exception& e) { int err = e.getError(); diff --git a/cpp/src/qpid/sys/rdma/rdma_wrap.h b/cpp/src/qpid/sys/rdma/rdma_wrap.h index e11497dc02..35843ce8f1 100644 --- a/cpp/src/qpid/sys/rdma/rdma_wrap.h +++ b/cpp/src/qpid/sys/rdma/rdma_wrap.h @@ -350,7 +350,7 @@ namespace Rdma { return ConnectionEvent(e); } - void bind(qpid::sys::SocketAddress& src_addr) const { + void bind(const qpid::sys::SocketAddress& src_addr) const { assert(id.get()); CHECK(::rdma_bind_addr(id.get(), getAddrInfo(src_addr).ai_addr)); } @@ -361,7 +361,7 @@ namespace Rdma { } void resolve_addr( - qpid::sys::SocketAddress& dst_addr, + const qpid::sys::SocketAddress& dst_addr, int timeout_ms = DEFAULT_TIMEOUT) const { assert(id.get()); |