On Wed, 2020-05-13 at 15:53 +0000, David Laight wrote: > > If we don't have pselect() we use the close() in the signal > > handler. In that case we're just waiting in the read(), we're not > > using select() or poll() or whatever. It's definitely the case > > that if we're waiting in read() and someone closes the FD, we'll > > wake up! :) > > Ugg, that is relying on getting either EINTR or EBADFD.
Yes, exactly. > I can't remember if Posix allows SIGCHLD to be delivered > in a different thread. It does: all you have to do is ensure that all threads other than the one you want block the signal. However, GNU make is not multithreaded so this is moot. > Windows definitely likes delivering signals that way :-) In Windows IIRC GNU make doesn't use this method at all; Windows has some kind of process shared semaphore that is used instead. I didn't write that code so I can't really describe it in detail :)