summaryrefslogtreecommitdiff
path: root/qpid/cpp/src
diff options
context:
space:
mode:
authorAndrew Stitcher <astitcher@apache.org>2010-09-08 16:49:06 +0000
committerAndrew Stitcher <astitcher@apache.org>2010-09-08 16:49:06 +0000
commitcec4f54d2ad78420ee72f4e4a6f109eeff1768f6 (patch)
treed51c987d1097c43c30d799dc8d92615e42a9bbb0 /qpid/cpp/src
parent6a68e98b48de5fed2c76287ee1678b9078dbd4d0 (diff)
downloadqpid-python-cec4f54d2ad78420ee72f4e4a6f109eeff1768f6.tar.gz
Dispose the queue pair before acknowledging channel events when destroying
Rdma::QueuePair to stop any events being processed during destruction git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@995133 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp/src')
-rw-r--r--qpid/cpp/src/qpid/sys/rdma/rdma_wrap.cpp9
1 files changed, 6 insertions, 3 deletions
diff --git a/qpid/cpp/src/qpid/sys/rdma/rdma_wrap.cpp b/qpid/cpp/src/qpid/sys/rdma/rdma_wrap.cpp
index 4883f0ce14..510291f9b3 100644
--- a/qpid/cpp/src/qpid/sys/rdma/rdma_wrap.cpp
+++ b/qpid/cpp/src/qpid/sys/rdma/rdma_wrap.cpp
@@ -139,14 +139,17 @@ namespace Rdma {
}
QueuePair::~QueuePair() {
+ // Reset back pointer in case someone else has the qp
+ qp->qp_context = 0;
+
+ // Dispose queue pair before we ack events
+ qp.reset();
+
if (outstandingSendEvents > 0)
::ibv_ack_cq_events(scq.get(), outstandingSendEvents);
if (outstandingRecvEvents > 0)
::ibv_ack_cq_events(rcq.get(), outstandingRecvEvents);
- // Reset back pointer in case someone else has the qp
- qp->qp_context = 0;
-
// Deallocate recv buffer memory
if (rmr) delete [] static_cast<char*>(rmr->addr);