From 6e8c137fb7deca75817d617d40ebd58bbcae186a 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. BUG: 1250797 Change-Id: I7d0346451d40372ad59a6a2326176fbb1e694712 Signed-off-by: Soumya Koduri Reviewed-on: http://review.gluster.org/11845 Reviewed-by: Raghavendra G Tested-by: Gluster Build System Reviewed-by: Kaleb KEITHLEY --- rpc/rpc-lib/src/rpc-clnt-ping.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'rpc/rpc-lib/src') diff --git a/rpc/rpc-lib/src/rpc-clnt-ping.c b/rpc/rpc-lib/src/rpc-clnt-ping.c index 64d319d0057..a7ff866ac99 100644 --- a/rpc/rpc-lib/src/rpc-clnt-ping.c +++ b/rpc/rpc-lib/src/rpc-clnt-ping.c @@ -84,9 +84,13 @@ rpc_clnt_remove_ping_timer_locked (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