vm_soft_fault(): Missing DEBUG_PAGE_ACCESS_END()

... in case we'd need to unmap a page that is wired.

Fixes the immediate issue of #10977. There's a problem remaining (as
discussed in comment 1): If two threads want to wire the same page at
the same time (which led to the assertion being triggered), they will
now deadlock, waiting for each other to remove the pre-registered
VMAreaWiredRange.
This commit is contained in:
Ingo Weinhold 2014-10-29 00:53:06 +01:00
parent 52d500e5b4
commit 70d3bd5592

View File

@ -4682,6 +4682,7 @@ vm_soft_fault(VMAddressSpace* addressSpace, addr_t originalAddress,
if (area->AddWaiterIfWired(&waiter, address, B_PAGE_SIZE,
wiredRange)) {
// unlock everything and wait
DEBUG_PAGE_ACCESS_END(context.page);
context.UnlockAll();
waiter.waitEntry.Wait();
continue;