summaryrefslogtreecommitdiffstats
path: root/sys/kern/sysv_shm.c
diff options
context:
space:
mode:
authordyson <dyson@FreeBSD.org>1996-09-10 01:42:34 +0000
committerdyson <dyson@FreeBSD.org>1996-09-10 01:42:34 +0000
commit2a6480c367bd2621cada668a2e36069cd73c2e0a (patch)
tree29fff9be57b66de15c4885b4911d6f8ee6859398 /sys/kern/sysv_shm.c
parentaae29b5fef43167b0ab23b5350b23a6312867900 (diff)
downloadFreeBSD-src-2a6480c367bd2621cada668a2e36069cd73c2e0a.zip
FreeBSD-src-2a6480c367bd2621cada668a2e36069cd73c2e0a.tar.gz
Make sure that the pager is allocated before it is needed. Hangs
can occur if the pager is not allocated in time.
Diffstat (limited to 'sys/kern/sysv_shm.c')
-rw-r--r--sys/kern/sysv_shm.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/sys/kern/sysv_shm.c b/sys/kern/sysv_shm.c
index e8e3ea2..1845418 100644
--- a/sys/kern/sysv_shm.c
+++ b/sys/kern/sysv_shm.c
@@ -1,4 +1,4 @@
-/* $Id: sysv_shm.c,v 1.21 1996/05/05 13:53:48 joerg Exp $ */
+/* $Id: sysv_shm.c,v 1.22 1996/09/07 03:24:44 dyson Exp $ */
/* $NetBSD: sysv_shm.c,v 1.23 1994/07/04 23:25:12 glass Exp $ */
/*
@@ -53,6 +53,7 @@
#include <vm/vm_map.h>
#include <vm/vm_kern.h>
#include <vm/vm_extern.h>
+#include <vm/vm_pager.h>
#ifndef _SYS_SYSPROTO_H_
struct shmat_args;
@@ -496,8 +497,13 @@ shmget_allocate_segment(p, uap, mode, retval)
malloc(sizeof(struct shm_handle), M_SHM, M_WAITOK);
shmid = IXSEQ_TO_IPCID(segnum, shmseg->shm_perm);
+ /*
+ * We make sure that we have allocated a pager before we need
+ * to.
+ */
shm_handle->shm_object =
- vm_object_allocate(OBJT_DEFAULT, round_page(size)/PAGE_SIZE);
+ vm_pager_allocate(OBJT_SWAP, 0, OFF_TO_IDX(size),
+ VM_PROT_DEFAULT, 0);
shmseg->shm_internal = shm_handle;
shmseg->shm_perm.cuid = shmseg->shm_perm.uid = cred->cr_uid;
shmseg->shm_perm.cgid = shmseg->shm_perm.gid = cred->cr_gid;
OpenPOWER on IntegriCloud