svn commit: r249566 - in head: lib/libc/gen sys/kern
John Baldwin
jhb at FreeBSD.org
Tue Apr 16 20:26:32 UTC 2013
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);
More information about the svn-src-head
mailing list