From 4ec99ad55f2ad74d67591cda68320c26235a9e12 Mon Sep 17 00:00:00 2001 From: Soumya Koduri Date: Thu, 6 Aug 2015 06:22:38 +0530 Subject: rpc-clnt: Check for transport object during rpc connection cleanup While doing glfs_fini(), all the xlators are first notified of PARENT_DOWN. protocol-client xlator on receving that notification does rpc_clnt_disable which disassociates rpc->conn with its transport object and does socket shutdown. So any further references to conn->trans should not happen during rpc connection cleanup which is done mainly as part of epoll event handling of EPOLLERR/EPOLLHUP. This is a backport of the below fix- http://review.gluster.org/#/c/11845/ BUG: 1254607 Change-Id: I619ec00fd061f77c9b04dfa6fd139620cb44189b Signed-off-by: Soumya Koduri Reviewed-on: http://review.gluster.org/11845 Reviewed-by: Raghavendra G Reviewed-by: Kaleb KEITHLEY Reviewed-on: http://review.gluster.org/11953 Tested-by: NetBSD Build System --- rpc/rpc-lib/src/rpc-clnt-ping.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'rpc') diff --git a/rpc/rpc-lib/src/rpc-clnt-ping.c b/rpc/rpc-lib/src/rpc-clnt-ping.c index 17f8874a6a4..77f3e32001c 100644 --- a/rpc/rpc-lib/src/rpc-clnt-ping.c +++ b/rpc/rpc-lib/src/rpc-clnt-ping.c @@ -89,9 +89,13 @@ __rpc_clnt_remove_ping_timer (struct rpc_clnt *rpc) return 1; } - gf_log_callingfn ("", GF_LOG_DEBUG, "%s: ping timer event " - "already removed", - conn->trans->peerinfo.identifier); + + /* This is to account for rpc_clnt_disable that might have set + * conn->trans to NULL. */ + if (conn->trans) + gf_log_callingfn ("", GF_LOG_DEBUG, "%s: ping timer event " + "already removed", + conn->trans->peerinfo.identifier); return 0; } -- cgit