Subject: Re: bug#17561: Emacs can forget processes

From: Jorgen Schaefer <[email-masked]>
Date: Thu, 29 May 2014 21:06:59 +0200

On Thu, 29 May 2014 20:23:00 +0200
Jorgen Schaefer <[email-masked]> wrote:

> See the attached trace. I spared you the few megs of read/select loop
> this time.
> 
> I don't understand it, though.
> 
> Line 4685 has a SIGCHLD. The next rt_sigprocmask that mentions CHLD is
> in line 4726, where SIGCHLD is in the oldset. It wasn't at 4714/4715.
> Huh? How did it get there?

I do not see the rt_sigreturn corresponding to the SIGINT in line 4724.
Which would mean that the signals blocked in a signal handler (which I
guess includes SIGCHLD, according to the SIG_BLOCK in line 4726) won't
get restored.

I see the same sequence a few times in the full (21M) strace output:

SIGINT, then SIG_UNBLOCK for [INT], SIG_BLOCK for [WINCH IO] with
oldmask [QUIT ALRM CHILD PROF WINCH IO], then two calls to write(),
and then SIG_UNBLOCK with [WINCH IO], then a SIGIO, but no rt_sigreturn
for the SIGINT.