summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Stitcher <astitcher@apache.org>2010-01-26 20:45:03 +0000
committerAndrew Stitcher <astitcher@apache.org>2010-01-26 20:45:03 +0000
commit832887152f0cfbb0ff1d9ca3d3c5624818ecc87d (patch)
tree70f94276df7fb709018d809bdf0f9f597f549d65
parentfaeceaf81e73b23260d32503bc09e87f6ed2e735 (diff)
downloadqpid-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.cpp8
-rw-r--r--cpp/src/qpid/sys/RdmaIOPlugin.cpp11
-rw-r--r--cpp/src/qpid/sys/rdma/RdmaClient.cpp7
-rw-r--r--cpp/src/qpid/sys/rdma/RdmaIO.cpp16
-rw-r--r--cpp/src/qpid/sys/rdma/RdmaIO.h12
-rw-r--r--cpp/src/qpid/sys/rdma/RdmaServer.cpp6
-rw-r--r--cpp/src/qpid/sys/rdma/rdma_wrap.h4
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());