glusterfsd: fix to return actual exit status on mount process

Problem:
Currently, we always exit mount process with the pid as the exit number
which is return value of the waitpid(), it is not the exit value of the
child process

Solution:
Extract the actual exit code/status in case if the child terminated normally,
that is, by calling exit(3) or _exit(2), or by returning from main()

Change-Id: Iefec6e27b5a5a98a22f016e49967978853662e37
BUG: 1331042
Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
Reviewed-on: http://review.gluster.org/14094
Tested-by: Prasanna Kumar Kalever <pkalever@redhat.com>
Smoke: Gluster Build System <jenkins@build.gluster.com>
NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
CentOS-regression: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Raghavendra Talur <rtalur@redhat.com>
Reviewed-by: Jeff Darcy <jdarcy@redhat.com>
This commit is contained in:
Prasanna Kumar Kalever 2016-04-27 19:29:09 +05:30 committed by Jeff Darcy
parent c2865e83d4
commit 36d025ef6f

View File

@ -2117,7 +2117,7 @@ daemonize (glusterfs_ctx_t *ctx)
int ret = -1;
cmd_args_t *cmd_args = NULL;
int cstatus = 0;
int err = 0;
int err = 1;
cmd_args = &ctx->cmd_args;
@ -2162,14 +2162,17 @@ daemonize (glusterfs_ctx_t *ctx)
if (ctx->mnt_pid > 0) {
ret = waitpid (ctx->mnt_pid, &cstatus, 0);
if (!(ret == ctx->mnt_pid && cstatus == 0)) {
if (!(ret == ctx->mnt_pid)) {
if (WIFEXITED(cstatus)) {
err = WEXITSTATUS(cstatus);
} else {
err = cstatus;
}
gf_msg ("daemonize", GF_LOG_ERROR, 0,
glusterfsd_msg_25);
exit (1);
exit (err);
}
}
err = 1;
sys_read (ctx->daemon_pipe[0], (void *)&err, sizeof (err));
_exit (err);
}