From owner-svn-src-all@FreeBSD.ORG Sat Oct 1 10:18:55 2011 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id BA51B1065674; Sat, 1 Oct 2011 10:18:55 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id AA74A8FC17; Sat, 1 Oct 2011 10:18:55 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p91AItcq010924; Sat, 1 Oct 2011 10:18:55 GMT (envelope-from kib@svn.freebsd.org) Received: (from kib@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p91AItDp010921; Sat, 1 Oct 2011 10:18:55 GMT (envelope-from kib@svn.freebsd.org) Message-Id: <201110011018.p91AItDp010921@svn.freebsd.org> From: Konstantin Belousov Date: Sat, 1 Oct 2011 10:18:55 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r225894 - in head/sys: kern sys X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 01 Oct 2011 10:18:55 -0000 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.c Sat Oct 1 09:16:07 2011 (r225893) +++ head/sys/kern/kern_sig.c Sat 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.h Sat Oct 1 09:16:07 2011 (r225893) +++ head/sys/sys/param.h Sat Oct 1 10:18:55 2011 (r225894) @@ -61,6 +61,7 @@ #define __FreeBSD_version 1000000 /* Master, propagated to newvers */ #ifdef _KERNEL +#define P_OSREL_SIGWAIT 700000 #define P_OSREL_SIGSEGV 700004 #define P_OSREL_MAP_ANON 800104 #endif