From aa26d107902039f78a211ce68d93f01b0117ad72 Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Mon, 12 Apr 2010 15:25:08 +0000 Subject: [PATCH] delete_area(): When the address space is the kernel address space, we need to pass stricter allocation flags to VMAddressSpace::{Remove,Delete}Area() or could deadlock otherwise. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36188 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/system/kernel/vm/vm.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/system/kernel/vm/vm.cpp b/src/system/kernel/vm/vm.cpp index 177cfc5c18..f36c1e7663 100644 --- a/src/system/kernel/vm/vm.cpp +++ b/src/system/kernel/vm/vm.cpp @@ -2048,14 +2048,17 @@ delete_area(VMAddressSpace* addressSpace, VMArea* area, if (!area->cache->temporary) area->cache->WriteModified(); + uint32 allocationFlags = addressSpace == VMAddressSpace::Kernel() + ? HEAP_DONT_WAIT_FOR_MEMORY | HEAP_DONT_LOCK_KERNEL_SPACE : 0; + arch_vm_unset_memory_type(area); - addressSpace->RemoveArea(area, 0); + addressSpace->RemoveArea(area, allocationFlags); addressSpace->Put(); area->cache->RemoveArea(area); area->cache->ReleaseRef(); - addressSpace->DeleteArea(area, 0); + addressSpace->DeleteArea(area, allocationFlags); }