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);
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to