Don't announce page access before being sure that the page isn't busy. Fixes
the erroneously trigger panic() in #5216. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34958 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -1659,17 +1659,16 @@ vm_page_write_modified_page_range(struct VMCache* cache, uint32 firstPage,
|
|||||||
|
|
||||||
bool dequeuedPage = false;
|
bool dequeuedPage = false;
|
||||||
if (page != NULL) {
|
if (page != NULL) {
|
||||||
DEBUG_PAGE_ACCESS_START(page);
|
|
||||||
|
|
||||||
if (page->state == PAGE_STATE_MODIFIED) {
|
if (page->state == PAGE_STATE_MODIFIED) {
|
||||||
|
DEBUG_PAGE_ACCESS_START(page);
|
||||||
AutoLocker<VMPageQueue> locker(sModifiedPageQueue);
|
AutoLocker<VMPageQueue> locker(sModifiedPageQueue);
|
||||||
sModifiedPageQueue.Remove(page);
|
sModifiedPageQueue.Remove(page);
|
||||||
dequeuedPage = true;
|
dequeuedPage = true;
|
||||||
} else if (page->state == PAGE_STATE_BUSY
|
} else if (page->state == PAGE_STATE_BUSY
|
||||||
|| !vm_test_map_modification(page)) {
|
|| !vm_test_map_modification(page)) {
|
||||||
DEBUG_PAGE_ACCESS_END(page);
|
|
||||||
page = NULL;
|
page = NULL;
|
||||||
}
|
} else
|
||||||
|
DEBUG_PAGE_ACCESS_START(page);
|
||||||
}
|
}
|
||||||
|
|
||||||
PageWriteWrapper* wrapper = NULL;
|
PageWriteWrapper* wrapper = NULL;
|
||||||
|
|||||||
Reference in New Issue
Block a user