summaryrefslogtreecommitdiff
path: root/sys/kern/sysv_sem.c
diff options
context:
space:
mode:
authorKonstantin Belousov <kib@FreeBSD.org>2009-01-15 12:15:46 +0000
committerKonstantin Belousov <kib@FreeBSD.org>2009-01-15 12:15:46 +0000
commit137cf3b682f076b54b5c21d44d3701b633626a41 (patch)
treeaae03d0ed37fbdec6c6457e4413d72361acc61c1 /sys/kern/sysv_sem.c
parent892f21a68124e1d4fbe7e5a5b6f46227441edf00 (diff)
Notes
Diffstat (limited to 'sys/kern/sysv_sem.c')
-rw-r--r--sys/kern/sysv_sem.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/sys/kern/sysv_sem.c b/sys/kern/sysv_sem.c
index 46a307f4f29d..0112a042088c 100644
--- a/sys/kern/sysv_sem.c
+++ b/sys/kern/sysv_sem.c
@@ -914,6 +914,9 @@ semget(struct thread *td, struct semget_args *uap)
goto done2;
}
DPRINTF(("semid %d is available\n", semid));
+ mtx_lock(&sema_mtx[semid]);
+ KASSERT((sema[semid].u.sem_perm.mode & SEM_ALLOC) == 0,
+ ("Lost semaphore %d", semid));
sema[semid].u.sem_perm.key = key;
sema[semid].u.sem_perm.cuid = cred->cr_uid;
sema[semid].u.sem_perm.uid = cred->cr_uid;
@@ -932,6 +935,7 @@ semget(struct thread *td, struct semget_args *uap)
#ifdef MAC
mac_sysvsem_create(cred, &sema[semid]);
#endif
+ mtx_unlock(&sema_mtx[semid]);
DPRINTF(("sembase = %p, next = %p\n",
sema[semid].u.sem_base, &sem[semtot]));
} else {