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
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.
Discussed with: davidxu
MFC after:1 week
Modified:
head/sys/kern/kern_sig.c
head/sys/sys/param.h
Modified: head/sys/kern/kern_sig.c
==
--- head/sys/kern/kern_sig.cSat Oct 1 09:16:07 2011(r225893)
+++ head/sys/kern/kern_sig.cSat Oct 1 10:18:55 2011(r225894)
@@ -1094,6 +1094,8 @@ sys_sigwait(struct thread *td, struct si
error = kern_sigtimedwait(td, set, ksi, NULL);
if (error) {
+ if (error == EINTR td-td_proc-p_osrel P_OSREL_SIGWAIT)
+ error = ERESTART;
if (error == ERESTART)
return (error);
td-td_retval[0] = error;
Modified: head/sys/sys/param.h
==
--- head/sys/sys/param.hSat Oct 1 09:16:07 2011(r225893)
+++ head/sys/sys/param.hSat Oct 1 10:18:55 2011(r225894)
@@ -61,6 +61,7 @@
#define __FreeBSD_version 100 /* Master, propagated to newvers */
#ifdef _KERNEL
+#defineP_OSREL_SIGWAIT 70
#defineP_OSREL_SIGSEGV 74
#defineP_OSREL_MAP_ANON800104
#endif
___
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to svn-src-all-unsubscr...@freebsd.org