diff options
| author | Krishnan Parthasarathi <kparthas@redhat.com> | 2012-08-28 13:12:31 +0530 | 
|---|---|---|
| committer | Vijay Bellur <vbellur@redhat.com> | 2012-08-30 03:26:44 -0700 | 
| commit | 84298d77060772b91123d9cde9f0e6e4d9efc9ca (patch) | |
| tree | abeab7f9f20746c55f5aab23ec3468781de0cc44 | |
| parent | e908ee20e8a87ba1170f228dd4dd5993f36a0da6 (diff) | |
glusterfsd: rpcsvc actors must return success after an attempt to submit reply
rpcsvc attempts to send "error reply" using the req object. If actor has
already performed rpcsvc_submit_generic, then req is destroyed. So if the
actor returned -1 (RPCSVC_ACTOR_ERROR) on failing to submit reply, then req
would be 'free'd' twice and will result in a crash eventually.
Change-Id: I5eae19570202bbe5e154e9cb03390cfeb9b5f223
BUG: 851410
Signed-off-by: Krishnan Parthasarathi <kparthas@redhat.com>
Reviewed-on: http://review.gluster.org/3863
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Anand Avati <avati@redhat.com>
Reviewed-on: http://review.gluster.org/3875
Reviewed-by: Vijay Bellur <vbellur@redhat.com>
| -rw-r--r-- | glusterfsd/src/glusterfsd-mgmt.c | 20 | 
1 files changed, 12 insertions, 8 deletions
diff --git a/glusterfsd/src/glusterfsd-mgmt.c b/glusterfsd/src/glusterfsd-mgmt.c index 7f92299ff04..32b8f86ecb0 100644 --- a/glusterfsd/src/glusterfsd-mgmt.c +++ b/glusterfsd/src/glusterfsd-mgmt.c @@ -230,8 +230,9 @@ glusterfs_translator_info_response_send (rpcsvc_request_t *req, int ret,          if (!ret)                  free_ptr = _gf_true; -        ret = glusterfs_submit_reply (req, &rsp, NULL, 0, NULL, -                                     (xdrproc_t)xdr_gd1_mgmt_brick_op_rsp); +        glusterfs_submit_reply (req, &rsp, NULL, 0, NULL, +                                (xdrproc_t)xdr_gd1_mgmt_brick_op_rsp); +        ret = 0;          if (free_ptr)                  GF_FREE (rsp.output.output_val);          return ret; @@ -910,8 +911,9 @@ glusterfs_handle_brick_status (rpcsvc_request_t *req)                  goto out;          } -        ret = glusterfs_submit_reply (req, &rsp, NULL, 0, NULL, -                                      (xdrproc_t)xdr_gd1_mgmt_brick_op_rsp); +        glusterfs_submit_reply (req, &rsp, NULL, 0, NULL, +                                (xdrproc_t)xdr_gd1_mgmt_brick_op_rsp); +        ret = 0;  out:          if (dict) @@ -1094,8 +1096,9 @@ glusterfs_handle_node_status (rpcsvc_request_t *req)                  goto out;          } -        ret = glusterfs_submit_reply (req, &rsp, NULL, 0, NULL, -                                      (xdrproc_t)xdr_gd1_mgmt_brick_op_rsp); +        glusterfs_submit_reply (req, &rsp, NULL, 0, NULL, +                                (xdrproc_t)xdr_gd1_mgmt_brick_op_rsp); +        ret = 0;  out:          if (dict) @@ -1192,8 +1195,9 @@ glusterfs_handle_nfs_profile (rpcsvc_request_t *req)                  goto out;          } -        ret = glusterfs_submit_reply (req, &rsp, NULL, 0, NULL, -                                      (xdrproc_t)xdr_gd1_mgmt_brick_op_rsp); +        glusterfs_submit_reply (req, &rsp, NULL, 0, NULL, +                                (xdrproc_t)xdr_gd1_mgmt_brick_op_rsp); +        ret = 0;  out:          if (nfs_req.input.input_val)  | 
