summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKrishnan Parthasarathi <kparthas@redhat.com>2012-08-28 13:12:31 +0530
committerAnand Avati <avati@redhat.com>2012-08-28 07:56:10 -0700
commitfbf2e9dfce3487c245715370abadd469a3bc744f (patch)
tree681063a96bd0c144ee4765cc4756ef06fae12177
parent2ff5e1c2a1c0fedd437d2d892dfab21f720f5a1c (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>
-rw-r--r--glusterfsd/src/glusterfsd-mgmt.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/glusterfsd/src/glusterfsd-mgmt.c b/glusterfsd/src/glusterfsd-mgmt.c
index 3006c66b7f2..b4cf6fd5b98 100644
--- a/glusterfsd/src/glusterfsd-mgmt.c
+++ b/glusterfsd/src/glusterfsd-mgmt.c
@@ -223,8 +223,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;
@@ -896,8 +897,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)
@@ -1076,8 +1078,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)
@@ -1169,8 +1172,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:
free (nfs_req.input.input_val);