From 7b53ead64d86f4c09d02d0b83f96ce91bd431c4f Mon Sep 17 00:00:00 2001 From: Justus Winter <4winter@informatik.uni-hamburg.de> Date: Sun, 16 Aug 2015 14:35:02 +0200 Subject: [PATCH gnumach 07/12] fu_locking_issues --- vm/vm_pageout.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/vm/vm_pageout.c b/vm/vm_pageout.c index 51a6a0d..b676c7b 100644 --- a/vm/vm_pageout.c +++ b/vm/vm_pageout.c @@ -252,6 +252,8 @@ vm_pageout_setup( vm_object_unlock(new_object); } + vm_object_lock(old_object); + if (flush) { /* * Create a place-holder page where the old one was, @@ -262,7 +264,6 @@ vm_pageout_setup( == VM_PAGE_NULL) vm_page_more_fictitious(); - vm_object_lock(old_object); vm_page_lock_queues(); vm_page_remove(m); vm_page_unlock_queues(); @@ -281,8 +282,6 @@ vm_pageout_setup( VM_EXTERNAL_STATE_EXISTS); #endif /* MACH_PAGEMAP */ - vm_object_unlock(old_object); - vm_object_lock(new_object); /* @@ -305,7 +304,6 @@ vm_pageout_setup( */ vm_page_copy(m, new_m); - vm_object_lock(old_object); m->dirty = FALSE; pmap_clear_modify(m->phys_addr); @@ -328,8 +326,6 @@ vm_pageout_setup( VM_EXTERNAL_STATE_EXISTS); #endif /* MACH_PAGEMAP */ - vm_object_unlock(old_object); - vm_object_lock(new_object); /* @@ -383,6 +379,7 @@ vm_pageout_setup( */ vm_object_unlock(new_object); + vm_object_unlock(old_object); /* * Return the placeholder page to simplify cleanup. -- 2.1.4