From 270dffa378a651369d6727fa38ae99934d953259 Mon Sep 17 00:00:00 2001 From: Raghavendra G Date: Tue, 7 Sep 2010 13:02:27 +0000 Subject: 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 Signed-off-by: Vijay Bellur BUG: 1558 (glusterd hung) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1558 --- rpc/rpc-transport/rdma/src/rdma.c | 6 ++++-- 1 file 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) { -- cgit