summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRaghavendra G <raghavendra@gluster.com>2010-09-07 13:02:27 +0000
committerVijay Bellur <vijay@dev.gluster.com>2010-09-07 11:48:01 -0700
commit270dffa378a651369d6727fa38ae99934d953259 (patch)
tree4d63daba2a4b128220f646837f09fc3089255c76
parent171973d18d22e4f0f4117656c188d395bf3ac8a5 (diff)
rpc-transport/rdma: fix memory corruptions caused by rdma.
- disconnect notification should be sent before unrefing transport, since transport might be freed when unrefed. - set trans->listener. This member is used by rpcsvc to decide whether a listener or a new connection is dead. Signed-off-by: Raghavendra G <raghavendra@gluster.com> Signed-off-by: Vijay Bellur <vijay@dev.gluster.com> BUG: 1558 (glusterd hung) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1558
-rw-r--r--rpc/rpc-transport/rdma/src/rdma.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/rpc/rpc-transport/rdma/src/rdma.c b/rpc/rpc-transport/rdma/src/rdma.c
index 2ea787cab4c..ccc759e7985 100644
--- a/rpc/rpc-transport/rdma/src/rdma.c
+++ b/rpc/rpc-transport/rdma/src/rdma.c
@@ -4253,11 +4253,11 @@ rdma_handshake_pollerr (rpc_transport_t *this)
}
pthread_mutex_unlock (&priv->write_mutex);
+ rpc_transport_notify (this, RPC_TRANSPORT_DISCONNECT, this);
+
if (need_unref)
rpc_transport_unref (this);
- rpc_transport_notify (this, RPC_TRANSPORT_DISCONNECT, this);
-
return 0;
}
@@ -4521,6 +4521,8 @@ rdma_server_event_handler (int fd, int idx, void *data,
return -1;
}
+ this->listener = trans;
+
priv = GF_CALLOC (1, sizeof (rdma_private_t),
gf_common_mt_rdma_private_t);
if (priv == NULL) {