diff options
author | Krishnan Parthasarathi <kp@gluster.com> | 2011-09-27 18:38:00 +0530 |
---|---|---|
committer | Vijay Bellur <vijay@gluster.com> | 2011-10-16 22:59:10 -0700 |
commit | f9e58c75f6bffabc29872f20688ac3a30a6a2bee (patch) | |
tree | 1fbb7a1c32d864b993d96e7e805aecd77be895af /xlators | |
parent | e56c6f594b5f8b3453e331c9ec5963f727240bb4 (diff) |
glusterd: Should not cleanup peerinfo too soon.
friend_remove_cbk cleans up peerinfo and the unrefs the associated rpc_clnt
obj. When the cbk is run inside call_bail or saved_frames_unwind, we might end
up destroying the rpc_clnt and associated saved_frames_pool while we are still
using saved_frames to iterate through the frames.
Change-Id: I9c43797cb35104d35b011c26d773a0b375248f2d
BUG: 3511
Reviewed-on: http://review.gluster.com/513
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Amar Tumballi <amar@gluster.com>
Reviewed-by: Vijay Bellur <vijay@gluster.com>
Diffstat (limited to 'xlators')
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-handler.c | 1 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-rpc-ops.c | 7 |
2 files changed, 4 insertions, 4 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-handler.c b/xlators/mgmt/glusterd/src/glusterd-handler.c index 6dd218cd940..a4af71e3bc1 100644 --- a/xlators/mgmt/glusterd/src/glusterd-handler.c +++ b/xlators/mgmt/glusterd/src/glusterd-handler.c @@ -3877,6 +3877,7 @@ glusterd_peer_rpc_notify (struct rpc_clnt *rpc, void *mydata, break; } + glusterd_friend_sm (); return ret; } diff --git a/xlators/mgmt/glusterd/src/glusterd-rpc-ops.c b/xlators/mgmt/glusterd/src/glusterd-rpc-ops.c index f6134839f89..faba229b4c4 100644 --- a/xlators/mgmt/glusterd/src/glusterd-rpc-ops.c +++ b/xlators/mgmt/glusterd/src/glusterd-rpc-ops.c @@ -603,6 +603,7 @@ glusterd3_1_friend_remove_cbk (struct rpc_req * req, struct iovec *iov, int32_t op_ret = -1; int32_t op_errno = -1; glusterd_probe_ctx_t *ctx = NULL; + gf_boolean_t move_sm_now = _gf_true; conf = THIS->private; GF_ASSERT (conf); @@ -614,6 +615,7 @@ glusterd3_1_friend_remove_cbk (struct rpc_req * req, struct iovec *iov, if (-1 == req->rpc_status) { rsp.op_ret = -1; rsp.op_errno = EINVAL; + move_sm_now = _gf_false; goto inject; } @@ -657,16 +659,13 @@ inject: if (ret) goto respond; - glusterd_friend_sm (); - glusterd_op_sm (); - op_ret = 0; respond: ret = glusterd_xfer_cli_deprobe_resp (ctx->req, op_ret, op_errno, ctx->hostname); - if (!ret) { + if (move_sm_now) { glusterd_friend_sm (); glusterd_op_sm (); } |