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)
|
if (!area->cache->temporary)
|
||||||
area->cache->WriteModified();
|
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);
|
arch_vm_unset_memory_type(area);
|
||||||
addressSpace->RemoveArea(area, 0);
|
addressSpace->RemoveArea(area, allocationFlags);
|
||||||
addressSpace->Put();
|
addressSpace->Put();
|
||||||
|
|
||||||
area->cache->RemoveArea(area);
|
area->cache->RemoveArea(area);
|
||||||
area->cache->ReleaseRef();
|
area->cache->ReleaseRef();
|
||||||
|
|
||||||
addressSpace->DeleteArea(area, 0);
|
addressSpace->DeleteArea(area, allocationFlags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user