This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
Thanks, I have committed this now.
Siddhesh
On Fri, Jun 27, 2014 at 09:25:16AM +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.
>
> ChangeLog:
>
> 2014-06-27 Arjun Shankar <arjun.is@lostca.se>
>
> [BZ #17092]
> * nscd/nscd.c (monitor_child): Fix how status reported by
> 'wait' is interpreted.
> ---
> nscd/nscd.c | 22 +++++++++++++---------
> 1 file changed, 13 insertions(+), 9 deletions(-)
>
> Changes in v2:
> - remove periods at the end of error messages
> diff --git a/nscd/nscd.c b/nscd/nscd.c
> index 3dd1135..7131ead 100644
> --- a/nscd/nscd.c
> +++ b/nscd/nscd.c
> @@ -612,21 +612,25 @@ 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)
> {
> - fprintf (stderr, _("wait failed"));
> + fprintf (stderr, _("'wait' failed\n"));
> 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. */
Attachment:
pgpFHAtkRjZrh.pgp
Description: PGP signature
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |