diff options
author | jhb <jhb@FreeBSD.org> | 2013-04-16 20:26:31 +0000 |
---|---|---|
committer | jhb <jhb@FreeBSD.org> | 2013-04-16 20:26:31 +0000 |
commit | 0ed1bc2e92ec2a84dd3da0bc98f296edaebc318e (patch) | |
tree | 2790edcc2056d97f1f5ab28bba61ab26eb53b800 /sys/kern | |
parent | 2f4d81f0936ee8936392573dd361b4260a1f393c (diff) | |
download | FreeBSD-src-0ed1bc2e92ec2a84dd3da0bc98f296edaebc318e.zip FreeBSD-src-0ed1bc2e92ec2a84dd3da0bc98f296edaebc318e.tar.gz |
- 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
Diffstat (limited to 'sys/kern')
-rw-r--r-- | sys/kern/uipc_sem.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/sys/kern/uipc_sem.c b/sys/kern/uipc_sem.c index 509f32e..0ea84fd 100644 --- a/sys/kern/uipc_sem.c +++ b/sys/kern/uipc_sem.c @@ -846,6 +846,8 @@ kern_sem_wait(struct thread *td, semid_t id, int tryflag, 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); |