Subject: bug#13157: 24.3.50; Crash with Helm?

From: Eli Zaretskii <[email-masked]>
Date: Wed, 12 Dec 2012 20:48:41 +0200

> From: "Fabrice Niessen" <[email-masked]>
> Cc: [email-masked]
> Date: Wed, 12 Dec 2012 17:58:53 +0100
> 
> > This abort comes from here:
> >
> >   while ((pid = waitpid (child, status, options)) < 0)
> >     {
> >       /* Check that CHILD is a child process that has not been reaped,
> > 	 and that STATUS and OPTIONS are valid.  Otherwise abort,
> > 	 as continuing after this internal error could cause Emacs to
> > 	 become confused and kill innocent-victim processes.  */
> >       if (errno != EINTR)
> > 	emacs_abort ();  <<<<<<<<<<<<<<<<<<<<<<<<<
> >
> > What it means is that Emacs was trying to get exit status of a process
> > that no longer exists.  To make sure this is the reason, please do
> > this from GDB:
> >
> >  (gdb) frame 2
> >  (gdb) print errno
> 
> --8<---------------cut here---------------start------------->8---
> (gdb) frame 2
> #2  0x01144111 in get_child_status (child=9468, status=0x0, options=1, interruptible=false) at sysdep.c:297
> 297     sysdep.c: No such file or directory.
> (gdb) print errno
> $1 = 10
> --8<---------------cut here---------------end--------------->8---
> 
> Is it what you expected?

Yes.  This is ECHILD.  It means waitpid returned here:

      if (nh == 0)
	{
	  /* No such child process, or nothing to wait for, so fail.  */
	  errno = ECHILD;
	  return -1;
	}