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
This commit is contained in:
Ingo Weinhold
2010-04-12 15:25:08 +00:00
parent 846cb93278
commit aa26d10790
+5 -2
View File
@@ -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);
}