diff options
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-handler.c | 1 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-rpc-ops.c | 11 | 
2 files changed, 8 insertions, 4 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-handler.c b/xlators/mgmt/glusterd/src/glusterd-handler.c index a62255c011c..808459cfb7c 100644 --- a/xlators/mgmt/glusterd/src/glusterd-handler.c +++ b/xlators/mgmt/glusterd/src/glusterd-handler.c @@ -2724,6 +2724,7 @@ glusterd_peer_rpc_notify (struct rpc_clnt *rpc, void *mydata,                  break;          } +        glusterd_friend_sm ();          glusterd_op_sm ();          return ret;  } diff --git a/xlators/mgmt/glusterd/src/glusterd-rpc-ops.c b/xlators/mgmt/glusterd/src/glusterd-rpc-ops.c index 9cdab97df8b..4d7e687f2e9 100644 --- a/xlators/mgmt/glusterd/src/glusterd-rpc-ops.c +++ b/xlators/mgmt/glusterd/src/glusterd-rpc-ops.c @@ -694,6 +694,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); @@ -705,6 +706,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;          } @@ -748,16 +750,17 @@ inject:          if (ret)                  goto respond; -        glusterd_friend_sm (); -        glusterd_op_sm (); - +        /*friend_sm would be moved on CLNT_DISCONNECT, consequently +          cleaning up peerinfo. Else, we run the risk of triggering +          a clnt_destroy within saved_frames_unwind. +        */          op_ret = 0;  respond:          ret = glusterd_xfer_cli_deprobe_resp (ctx->req, op_ret, op_errno,                                                ctx->hostname); -        if (!ret) { +        if (!ret && move_sm_now) {                  glusterd_friend_sm ();                  glusterd_op_sm ();          }  | 
