summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
authorAndrew Stitcher <astitcher@apache.org>2010-09-08 16:49:55 +0000
committerAndrew Stitcher <astitcher@apache.org>2010-09-08 16:49:55 +0000
commitc358479ca71b3cd2101ea6c39a4745221acf28aa (patch)
treea36d2aa107bcf1fffa866c13b53c78a2dd72ebd3 /cpp/src
parent90ed79ef1ea673df63e85adf9c355226f8bbc1df (diff)
downloadqpid-python-c358479ca71b3cd2101ea6c39a4745221acf28aa.tar.gz
Stop the client side Rdma code from receiving connection events before the data events
are stopped to avoid any events after the Rdma::Connector is deleted git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@995145 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/qpid/client/RdmaConnector.cpp1
-rw-r--r--cpp/src/qpid/sys/rdma/RdmaIO.cpp4
-rw-r--r--cpp/src/qpid/sys/rdma/RdmaIO.h1
3 files changed, 6 insertions, 0 deletions
diff --git a/cpp/src/qpid/client/RdmaConnector.cpp b/cpp/src/qpid/client/RdmaConnector.cpp
index f8f38fb050..208d42f672 100644
--- a/cpp/src/qpid/client/RdmaConnector.cpp
+++ b/cpp/src/qpid/client/RdmaConnector.cpp
@@ -281,6 +281,7 @@ void RdmaConnector::stopped(Rdma::AsynchIO* a) {
void RdmaConnector::drained() {
QPID_LOG(debug, "RdmaConnector::drained " << identifier);
assert(!polling);
+ acon->stop();
if (aio) {
Rdma::AsynchIO* a = aio;
aio = 0;
diff --git a/cpp/src/qpid/sys/rdma/RdmaIO.cpp b/cpp/src/qpid/sys/rdma/RdmaIO.cpp
index c89e0f2126..69776654ef 100644
--- a/cpp/src/qpid/sys/rdma/RdmaIO.cpp
+++ b/cpp/src/qpid/sys/rdma/RdmaIO.cpp
@@ -518,6 +518,10 @@ namespace Rdma {
handle.startWatch(poller);
}
+ void ConnectionManager::stop() {
+ handle.stopWatch();
+ }
+
void ConnectionManager::event(DispatchHandle&) {
connectionEvent(ci);
}
diff --git a/cpp/src/qpid/sys/rdma/RdmaIO.h b/cpp/src/qpid/sys/rdma/RdmaIO.h
index 72cbac154b..55174ea8a1 100644
--- a/cpp/src/qpid/sys/rdma/RdmaIO.h
+++ b/cpp/src/qpid/sys/rdma/RdmaIO.h
@@ -179,6 +179,7 @@ namespace Rdma {
virtual ~ConnectionManager();
void start(qpid::sys::Poller::shared_ptr poller, const qpid::sys::SocketAddress& addr);
+ void stop();
private:
void event(qpid::sys::DispatchHandle& handle);