Author: bonefish Date: 2010-04-12 17:25:08 +0200 (Mon, 12 Apr 2010) New Revision: 36188 Changeset: http://dev.haiku-os.org/changeset/36188/haiku Modified: haiku/trunk/src/system/kernel/vm/vm.cpp Log: 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. Modified: haiku/trunk/src/system/kernel/vm/vm.cpp =================================================================== --- haiku/trunk/src/system/kernel/vm/vm.cpp 2010-04-12 14:41:44 UTC (rev 36187) +++ haiku/trunk/src/system/kernel/vm/vm.cpp 2010-04-12 15:25:08 UTC (rev 36188) @@ -2048,14 +2048,17 @@ 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); }