From b4798ac6a779178412ff17600b324482535c1f94 Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Tue, 10 Sep 2024 12:13:38 -0400 Subject: [PATCH] kernel: Add assertions to ensure vm_page_reservation is destroyed with a count of 0. Inspired by some of jpelczar's changes. --- headers/private/kernel/vm/vm_page.h | 8 ++++++++ src/system/kernel/vm/vm_page.cpp | 4 +++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/headers/private/kernel/vm/vm_page.h b/headers/private/kernel/vm/vm_page.h index 5b98398e51..464d254ce0 100644 --- a/headers/private/kernel/vm/vm_page.h +++ b/headers/private/kernel/vm/vm_page.h @@ -20,6 +20,14 @@ extern int32 gMappedPagesCount; struct vm_page_reservation { uint32 count; + +#if KDEBUG && defined(__cplusplus) + vm_page_reservation() : count(0) {} + ~vm_page_reservation() + { + ASSERT(count == 0); + } +#endif }; diff --git a/src/system/kernel/vm/vm_page.cpp b/src/system/kernel/vm/vm_page.cpp index 8c1f522944..2e10e1ab06 100644 --- a/src/system/kernel/vm/vm_page.cpp +++ b/src/system/kernel/vm/vm_page.cpp @@ -3990,8 +3990,10 @@ vm_page_allocate_page_run(uint32 flags, page_num_t length, if (foundRun) { i = allocate_page_run(start, length, flags, freeClearQueueLocker); - if (i == length) + if (i == length) { + reservation.count = 0; return &sPages[start]; + } // apparently a cached page couldn't be allocated -- skip it and // continue