summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAtin Mukherjee <amukherj@redhat.com>2017-03-18 16:29:10 +0530
committerNiels de Vos <ndevos@redhat.com>2017-07-11 13:25:40 +0000
commit96e7452155c3fd1b160a97d88c03f1bf31b0be97 (patch)
tree8bced6e38524d44170756a3d627dc93660301d74
parent9d5328e0e07353501392b33e9553300bd34a32ad (diff)
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. Cherry picked from commit 39e09ad1e0e93f08153688c31433c38529f93716: > Change-Id: Id5332f3239cb324cead34eb51cf73d426733bd46 > BUG: 1433578 > Signed-off-by: Atin Mukherjee <amukherj@redhat.com> > Reviewed-on: https://review.gluster.org/16914 > Smoke: Gluster Build System <jenkins@build.gluster.org> > NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org> > Reviewed-by: Milind Changire <mchangir@redhat.com> > CentOS-regression: Gluster Build System <jenkins@build.gluster.org> > Reviewed-by: Jeff Darcy <jeff@pl.atyp.us> Change-Id: Id5332f3239cb324cead34eb51cf73d426733bd46 BUG: 1462447 Signed-off-by: Niels de Vos <ndevos@redhat.com> Reviewed-on: https://review.gluster.org/17743 Smoke: Gluster Build System <jenkins@build.gluster.org> Reviewed-by: Milind Changire <mchangir@redhat.com> CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
-rw-r--r--rpc/rpc-lib/src/rpc-clnt.c4
-rw-r--r--tests/bugs/glusterd/bug-1433578-invalid-peer-glusterd-crash.t14
2 files changed, 17 insertions, 1 deletions
diff --git a/rpc/rpc-lib/src/rpc-clnt.c b/rpc/rpc-lib/src/rpc-clnt.c
index b0995ef1373..d3df5560a8b 100644
--- a/rpc/rpc-lib/src/rpc-clnt.c
+++ b/rpc/rpc-lib/src/rpc-clnt.c
@@ -495,8 +495,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;
}
diff --git a/tests/bugs/glusterd/bug-1433578-invalid-peer-glusterd-crash.t b/tests/bugs/glusterd/bug-1433578-invalid-peer-glusterd-crash.t
new file mode 100644
index 00000000000..1aea8bc134d
--- /dev/null
+++ b/tests/bugs/glusterd/bug-1433578-invalid-peer-glusterd-crash.t
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+. $(dirname $0)/../../include.rc
+
+cleanup;
+
+## Start glusterd
+TEST glusterd;
+TEST pidof glusterd;
+
+TEST ! $CLI peer probe invalid-peer
+
+TEST pidof glusterd;
+cleanup;