diff options
author | Prasanna Kumar Kalever <prasanna.kalever@redhat.com> | 2016-04-27 19:29:09 +0530 |
---|---|---|
committer | Jeff Darcy <jdarcy@redhat.com> | 2016-04-29 06:23:59 -0700 |
commit | 36d025ef6f178ce5d8c6f7fa09e1cf236976b5ea (patch) | |
tree | f1d77f1176ddf4defffa7b98e06b5a512f5f1982 | |
parent | c2865e83d414e375443adac0791887c8adf444f2 (diff) |
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>
-rw-r--r-- | glusterfsd/src/glusterfsd.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/glusterfsd/src/glusterfsd.c b/glusterfsd/src/glusterfsd.c index 3d54229d894..09ba9cd8086 100644 --- a/glusterfsd/src/glusterfsd.c +++ b/glusterfsd/src/glusterfsd.c @@ -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); } |