Subject: bug#13192: 24.3.50; gdb caught SIG_DFL after launching a process

From: Eli Zaretskii <[email-masked]>
Date: Sat, 15 Dec 2012 17:50:15 +0200

> From: Ivan Kanis <[email-masked]>
> Cc: [email-masked]
> Date: Sat, 15 Dec 2012 16:31:11 +0100
> 
> Eli Zaretskii <[email-masked]> wrote:
> 
> >> #0  terminate_due_to_signal (sig=6, backtrace_limit=10) at emacs.c:315
> >> No locals.
> >> #1  0x081756cb in emacs_abort () at sysdep.c:2113
> >> No locals.
> >> #2  0x08173b5c in get_child_status (child=12251, status=0xbfffdae4, options=3, 
> >>     interruptible=false) at sysdep.c:297
> >>         pid = -1
> >
> > What is the value of errno in this frame #2?
> 
> 10

Which is ECHILD, AFAIK.

So I think the problem is that, while we wait for a process to exit in
'waitpid', that function is interrupted by SIGCHLD, and the signal
handler re-enters 'waitpid', which now returns with ECHILD instead of
EINTR.