summaryrefslogtreecommitdiffstats
path: root/sys/kern/uipc_sem.c
diff options
context:
space:
mode:
authorbms <bms@FreeBSD.org>2009-03-12 10:36:39 +0000
committerbms <bms@FreeBSD.org>2009-03-12 10:36:39 +0000
commit33b0309eb2b6e212d5a03522483eb96411ab631a (patch)
tree4cb0b2f97a0365dfcf43dc2b77366541ebfa97b7 /sys/kern/uipc_sem.c
parent6049578f97c4464098b12bc2c2f404fe103989a9 (diff)
downloadFreeBSD-src-33b0309eb2b6e212d5a03522483eb96411ab631a.zip
FreeBSD-src-33b0309eb2b6e212d5a03522483eb96411ab631a.tar.gz
Ensure that the semaphore value is re-checked after sem_lock
is re-acquired, after the condition variable is signalled. PR: http://www.freebsd.org/cgi/query-pr.cgi?pr=kern/127545 MFC after: 5 days Reviewed by: attilio
Diffstat (limited to 'sys/kern/uipc_sem.c')
-rw-r--r--sys/kern/uipc_sem.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/sys/kern/uipc_sem.c b/sys/kern/uipc_sem.c
index cd78f5b..da233a6 100644
--- a/sys/kern/uipc_sem.c
+++ b/sys/kern/uipc_sem.c
@@ -727,7 +727,7 @@ kern_sem_wait(struct thread *td, semid_t id, int tryflag,
#endif
DP(("kern_sem_wait value = %d, tryflag %d\n", ks->ks_value, tryflag));
vfs_timestamp(&ks->ks_atime);
- if (ks->ks_value == 0) {
+ while (ks->ks_value == 0) {
ks->ks_waiters++;
if (tryflag != 0)
error = EAGAIN;
OpenPOWER on IntegriCloud