[PATCH v2] Correctly report nscd child process status

Siddhesh Poyarekar siddhesh@redhat.com
Fri Jun 27 18:02:00 GMT 2014


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.  */

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 473 bytes
Desc: not available
URL: <http://sourceware.org/pipermail/libc-alpha/attachments/20140627/2fa15eb3/attachment.sig>


More information about the Libc-alpha mailing list