summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/sys/RdmaIOPlugin.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/qpid/sys/RdmaIOPlugin.cpp')
-rw-r--r--cpp/src/qpid/sys/RdmaIOPlugin.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/cpp/src/qpid/sys/RdmaIOPlugin.cpp b/cpp/src/qpid/sys/RdmaIOPlugin.cpp
index 8c7f410f00..b03f62337f 100644
--- a/cpp/src/qpid/sys/RdmaIOPlugin.cpp
+++ b/cpp/src/qpid/sys/RdmaIOPlugin.cpp
@@ -56,6 +56,7 @@ class RdmaIOHandler : public OutputControl {
Rdma::Connection::intrusive_ptr connection;
void write(const framing::ProtocolInitiation&);
+ void disconnectAction();
public:
RdmaIOHandler(Rdma::Connection::intrusive_ptr c, ConnectionCodec::Factory* f);
@@ -170,7 +171,7 @@ namespace {
}
}
-void RdmaIOHandler::disconnected() {
+void RdmaIOHandler::disconnectAction() {
{
Mutex::ScopedLock l(pollingLock);
// If we're closed already then we'll get to drained() anyway
@@ -180,6 +181,10 @@ void RdmaIOHandler::disconnected() {
aio->stop(boost::bind(&stopped, this));
}
+void RdmaIOHandler::disconnected() {
+ aio->requestCallback(boost::bind(&RdmaIOHandler::disconnectAction, this));
+}
+
void RdmaIOHandler::drained() {
// We know we've drained the write queue now, but we don't have to do anything
// because we can rely on the client to disconnect to trigger the connection