Message ID | 20140625012124.4c63692a@zion |
---|---|
State | Superseded |
Headers | show |
On Wed, Jun 25, 2014 at 01:21:24AM +0200, Arjun Shankar wrote: > The nscd parent process returns the result of a `wait' call rather than > the exit status of the child it waits for. These two aren't exactly the > same. In my case (and probably on most machines), the exit status is in > the 2nd LSB of the result of `wait', and so: > > e.g. if the nscd child process returns 1, the parent returns 1 << 8, > which Bash happily reports as 0. > > This patch should fix that. Thanks for the patch, it looks good, but there are a couple of things that usually need to be done before a bug fix is pushed in. It is not a compulsion if you don't intend to contribute regularly, so if you're not interested in doing those then say so and I'll do those things for you: 1. File a bug against nscd in the sourceware bugzilla 2. Refer to the contribution checklist[1] and update your submission accordingly. For example, your submission is missing a ChangeLog entry. Siddhesh [1] https://sourceware.org/glibc/wiki/Contribution%20checklist
diff --git a/nscd/nscd.c b/nscd/nscd.c index 3dd1135..298bdcc 100644 --- a/nscd/nscd.c +++ b/nscd/nscd.c @@ -612,7 +612,8 @@ monitor_child (int fd) method, like a segfault. */ if (ret <= 0 || child_ret != 0) { - int err = wait (&child_ret); + int status; + int err = wait (&status); if (err < 0) { @@ -620,13 +621,16 @@ monitor_child (int fd) return 1; } - fprintf (stderr, _("child exited with status %d"), - WEXITSTATUS (child_ret)); - if (WIFSIGNALED (child_ret)) - fprintf (stderr, _(", terminated by signal %d.\n"), - WTERMSIG (child_ret)); - else - fprintf (stderr, ".\n"); + if (WIFEXITED (status)) + { + child_ret = WEXITSTATUS (status); + fprintf (stderr, _("child exited with status %d.\n"), child_ret); + } + if (WIFSIGNALED (status)) + { + child_ret = WTERMSIG (status); + fprintf (stderr, _("child terminated by signal %d.\n"), child_ret); + } } /* We have the child status, so exit with that code. */