On Sat, Oct 01, 2011 at 10:18:55AM +0000, Konstantin Belousov wrote: > Author: kib > Date: Sat Oct 1 10:18:55 2011 > New Revision: 225894 > URL: http://svn.freebsd.org/changeset/base/225894 > > Log: > The sigwait(3) function shall not return EINTR, according to the > POSIX/SUSvN. The sigwait(2) syscall does return EINTR, and libc.so.7 > contains the wrapper sigwait(3) which hides EINTR from callers. The r212405 will be merged to stable/8 shortly.
> EINTR return is used by libthr to handle required cancellation point > in the sigwait(3). > > To help the binaries linked against pre-libc.so.7, i.e. RELENG_6 and > earlier, to have right ABI for sigwait(3), transform EINTR return from > sigwait(2) into ERESTART. This leaves the static binaries linked against libc.a from a system with libc.so.N, where N < 7 or N == 7 and does not contain r212405, with the broken sigwait(). More intrusive change is to allocate new syscall number for sigwait(2), and change old sigwait(2) to never return EINTR. Then, the static binaries linked on HEAD and stable/9 prior to introduction of the new sigwait syscall numbers will have broken cancellation at sigwait. I had this done, but sort of agreement we reached is to go with less intrusive commit you see. And before you ask, the story started from the real user report of a broken binary-only program that is not prepared to handle EINTR there.
pgpMSPL4Gc0pA.pgp
Description: PGP signature