Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 16 Apr 2013 20:26:31 +0000 (UTC)
From:      John Baldwin <jhb@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r249566 - in head: lib/libc/gen sys/kern
Message-ID:  <201304162026.r3GKQVgs093874@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jhb
Date: Tue Apr 16 20:26:31 2013
New Revision: 249566
URL: http://svnweb.freebsd.org/changeset/base/249566

Log:
  - Document that sem_wait() can fail with EINTR if it is interrupted by a
    signal.
  - Fix the old ksem implementation for POSIX semaphores to not restart
    sem_wait() or sem_timedwait() if interrupted by a signal.
  
  MFC after:	1 week

Modified:
  head/lib/libc/gen/sem_wait.3
  head/sys/kern/uipc_sem.c

Modified: head/lib/libc/gen/sem_wait.3
==============================================================================
--- head/lib/libc/gen/sem_wait.3	Tue Apr 16 20:21:02 2013	(r249565)
+++ head/lib/libc/gen/sem_wait.3	Tue Apr 16 20:26:31 2013	(r249566)
@@ -27,7 +27,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd February 15, 2000
+.Dd April 16, 2013
 .Dt SEM_WAIT 3
 .Os
 .Sh NAME
@@ -75,6 +75,14 @@ points to an invalid semaphore.
 .El
 .Pp
 Additionally,
+.Fn sem_wait
+will fail if:
+.Bl -tag -width Er
+.Pp
+.It Bq Er EINTR
+A signal interrupted this function.
+.El
+Additionally,
 .Fn sem_trywait
 will fail if:
 .Bl -tag -width Er

Modified: head/sys/kern/uipc_sem.c
==============================================================================
--- head/sys/kern/uipc_sem.c	Tue Apr 16 20:21:02 2013	(r249565)
+++ head/sys/kern/uipc_sem.c	Tue Apr 16 20:26:31 2013	(r249566)
@@ -846,6 +846,8 @@ kern_sem_wait(struct thread *td, semid_t
 err:
 	mtx_unlock(&sem_lock);
 	fdrop(fp, td);
+	if (error == ERESTART)
+		error = EINTR;
 	DP(("<<< kern_sem_wait leaving, pid=%d, error = %d\n",
 	    (int)td->td_proc->p_pid, error));
 	return (error);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201304162026.r3GKQVgs093874>