summaryrefslogtreecommitdiff
path: root/sys/vm
diff options
context:
space:
mode:
authorAlan Cox <alc@FreeBSD.org>2003-11-03 00:59:54 +0000
committerAlan Cox <alc@FreeBSD.org>2003-11-03 00:59:54 +0000
commita89c6258bbcd94de26be488dcd7e9bbb75f67dac (patch)
tree6d31eb73000165a893e1503006626445c41dadaa /sys/vm
parent806a364b8b1073321053b6037a29b1e0906ff07a (diff)
Notes
Diffstat (limited to 'sys/vm')
-rw-r--r--sys/vm/vm_map.c8
1 files changed, 3 insertions, 5 deletions
diff --git a/sys/vm/vm_map.c b/sys/vm/vm_map.c
index 956d048bc01a..021a81631202 100644
--- a/sys/vm/vm_map.c
+++ b/sys/vm/vm_map.c
@@ -2356,20 +2356,18 @@ vm_map_copy_entry(
* Make a copy of the object.
*/
if ((src_object = src_entry->object.vm_object) != NULL) {
-
+ VM_OBJECT_LOCK(src_object);
if ((src_object->handle == NULL) &&
(src_object->type == OBJT_DEFAULT ||
src_object->type == OBJT_SWAP)) {
- VM_OBJECT_LOCK(src_object);
vm_object_collapse(src_object);
- VM_OBJECT_UNLOCK(src_object);
if ((src_object->flags & (OBJ_NOSPLIT|OBJ_ONEMAPPING)) == OBJ_ONEMAPPING) {
+ VM_OBJECT_UNLOCK(src_object);
vm_object_split(src_entry);
src_object = src_entry->object.vm_object;
+ VM_OBJECT_LOCK(src_object);
}
}
-
- VM_OBJECT_LOCK(src_object);
vm_object_reference_locked(src_object);
vm_object_clear_flag(src_object, OBJ_ONEMAPPING);
VM_OBJECT_UNLOCK(src_object);