From c358479ca71b3cd2101ea6c39a4745221acf28aa Mon Sep 17 00:00:00 2001 From: Andrew Stitcher Date: Wed, 8 Sep 2010 16:49:55 +0000 Subject: 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 --- cpp/src/qpid/client/RdmaConnector.cpp | 1 + cpp/src/qpid/sys/rdma/RdmaIO.cpp | 4 ++++ cpp/src/qpid/sys/rdma/RdmaIO.h | 1 + 3 files changed, 6 insertions(+) (limited to 'cpp/src') 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); -- cgit v1.2.1