diff options
author | alfred <alfred@FreeBSD.org> | 2001-05-20 20:37:47 +0000 |
---|---|---|
committer | alfred <alfred@FreeBSD.org> | 2001-05-20 20:37:47 +0000 |
commit | cdb5d97b478a3e4f97dd6c0cd43105d0951daed5 (patch) | |
tree | 458517c8fe9db0339a6aca70dc360f2e95e0d614 /sys/kern/sysv_shm.c | |
parent | 79b7ca8187f3febc2214bf2336f498c3c4bb9471 (diff) | |
download | FreeBSD-src-cdb5d97b478a3e4f97dd6c0cd43105d0951daed5.zip FreeBSD-src-cdb5d97b478a3e4f97dd6c0cd43105d0951daed5.tar.gz |
Aquire vm mutex when releasing sysv shm segments.
Obtained from: Dima Dorfman <dima@unixfreak.org>
Diffstat (limited to 'sys/kern/sysv_shm.c')
-rw-r--r-- | sys/kern/sysv_shm.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/sys/kern/sysv_shm.c b/sys/kern/sysv_shm.c index 0a9abda..197791d 100644 --- a/sys/kern/sysv_shm.c +++ b/sys/kern/sysv_shm.c @@ -182,7 +182,9 @@ shm_deallocate_segment(shmseg) size_t size; shm_handle = shmseg->shm_internal; + mtx_lock(&vm_mtx); vm_object_deallocate(shm_handle->shm_object); + mtx_unlock(&vm_mtx); free((caddr_t)shm_handle, M_SHM); shmseg->shm_internal = NULL; size = round_page(shmseg->shm_segsz); @@ -203,7 +205,9 @@ shm_delete_mapping(p, shmmap_s) segnum = IPCID_TO_IX(shmmap_s->shmid); shmseg = &shmsegs[segnum]; size = round_page(shmseg->shm_segsz); + mtx_lock(&vm_mtx); result = vm_map_remove(&p->p_vmspace->vm_map, shmmap_s->va, shmmap_s->va + size); + mtx_unlock(&vm_mtx); if (result != KERN_SUCCESS) return EINVAL; shmmap_s->shmid = -1; |