diff options
author | alc <alc@FreeBSD.org> | 2003-04-26 19:36:19 +0000 |
---|---|---|
committer | alc <alc@FreeBSD.org> | 2003-04-26 19:36:19 +0000 |
commit | 4f5c780f99402280fe4832361f12e924dc25df04 (patch) | |
tree | e00cbf8f47227227f31db23bae0582cdc2e7558c /sys/vm | |
parent | a23076390bedf5de8125b8837baa6fdd96a82aee (diff) | |
download | FreeBSD-src-4f5c780f99402280fe4832361f12e924dc25df04.zip FreeBSD-src-4f5c780f99402280fe4832361f12e924dc25df04.tar.gz |
- Lock the vm_object on entry to vm_object_terminate().
Diffstat (limited to 'sys/vm')
-rw-r--r-- | sys/vm/vm_object.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/sys/vm/vm_object.c b/sys/vm/vm_object.c index 944d033..77c50de 100644 --- a/sys/vm/vm_object.c +++ b/sys/vm/vm_object.c @@ -502,6 +502,7 @@ vm_object_deallocate(vm_object_t object) return; } doterm: + VM_OBJECT_LOCK(object); temp = object->backing_object; if (temp) { TAILQ_REMOVE(&temp->shadow_head, object, shadow_list); @@ -516,6 +517,8 @@ doterm: */ if ((object->flags & OBJ_DEAD) == 0) vm_object_terminate(object); + else + VM_OBJECT_UNLOCK(object); object = temp; } vm_object_unlock(object); @@ -534,12 +537,11 @@ vm_object_terminate(vm_object_t object) vm_page_t p; int s; - GIANT_REQUIRED; + VM_OBJECT_LOCK_ASSERT(object, MA_OWNED); /* * Make sure no one uses us. */ - VM_OBJECT_LOCK(object); vm_object_set_flag(object, OBJ_DEAD); /* |