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:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user