diff options
Diffstat (limited to 'debian/patches/fix-locking0007-fu_locking_issues.patch')
| -rw-r--r-- | debian/patches/fix-locking0007-fu_locking_issues.patch | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/debian/patches/fix-locking0007-fu_locking_issues.patch b/debian/patches/fix-locking0007-fu_locking_issues.patch new file mode 100644 index 0000000..3086ab3 --- /dev/null +++ b/debian/patches/fix-locking0007-fu_locking_issues.patch @@ -0,0 +1,67 @@ +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 + |
