From 39e09ad1e0e93f08153688c31433c38529f93716 Mon Sep 17 00:00:00 2001 From: Atin Mukherjee Date: Sat, 18 Mar 2017 16:29:10 +0530 Subject: rpc: bump up conn->cleanup_gen in rpc_clnt_reconnect_cleanup Commit 086436a introduced generation number (cleanup_gen) to ensure that rpc layer doesn't end up cleaning up the connection object if application layer has already destroyed it. Bumping up cleanup_gen was done only in rpc_clnt_connection_cleanup (). However the same is needed in rpc_clnt_reconnect_cleanup () too as with out it if the object gets destroyed through the reconnect event in the application layer, rpc layer will still end up in trying to delete the object resulting into double free and crash. Peer probing an invalid host/IP was the basic test to catch this issue. Change-Id: Id5332f3239cb324cead34eb51cf73d426733bd46 BUG: 1433578 Signed-off-by: Atin Mukherjee Reviewed-on: https://review.gluster.org/16914 Smoke: Gluster Build System NetBSD-regression: NetBSD Build System Reviewed-by: Milind Changire CentOS-regression: Gluster Build System Reviewed-by: Jeff Darcy --- rpc/rpc-lib/src/rpc-clnt.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'rpc') diff --git a/rpc/rpc-lib/src/rpc-clnt.c b/rpc/rpc-lib/src/rpc-clnt.c index 9b5d5a112d9..d7a06c33d32 100644 --- a/rpc/rpc-lib/src/rpc-clnt.c +++ b/rpc/rpc-lib/src/rpc-clnt.c @@ -494,8 +494,10 @@ rpc_clnt_reconnect_cleanup (rpc_clnt_connection_t *conn) if (conn->reconnect) { ret = gf_timer_call_cancel (clnt->ctx, conn->reconnect); - if (!ret) + if (!ret) { reconnect_unref = _gf_true; + conn->cleanup_gen++; + } conn->reconnect = NULL; } -- cgit