< prev index next >
src/os/windows/vm/os_windows.cpp
Print this page
@@ -3421,11 +3421,15 @@
char * next_protect_addr = addr;
// Use VirtualQuery() to get the chunk size.
while (bytes_remaining) {
MEMORY_BASIC_INFORMATION alloc_info;
- VirtualQuery(next_protect_addr, &alloc_info, sizeof(alloc_info));
+ ret = VirtualQuery(next_protect_addr, &alloc_info, sizeof(alloc_info)) != 0;
+ if (!ret) {
+ return false;
+ }
+
size_t bytes_to_protect = MIN2(bytes_remaining, (size_t)alloc_info.RegionSize);
// We used different API at allocate_pages_individually() based on UseNUMAInterleaving,
// but we don't distinguish here as both cases are protected by same API.
ret = VirtualProtect(next_protect_addr, bytes_to_protect, p, old_status) != 0;
assert(ret, "Failed protecting chunk #%u", count);
@@ -3465,17 +3469,11 @@
// have different (one-shot) semantics, from MSDN on PAGE_GUARD:
//
// Pages in the region become guard pages. Any attempt to access a guard page
// causes the system to raise a STATUS_GUARD_PAGE exception and turn off
// the guard page status. Guard pages thus act as a one-time access alarm.
- bool use_individual = (UseNUMAInterleaving && !UseLargePages);
- bool ret;
- if (use_individual) {
- ret = protect_pages_individually(addr, bytes, p, &old_status);
- } else {
- ret = VirtualProtect(addr, bytes, p, &old_status) != 0;
- }
+ bool ret = protect_pages_individually(addr, bytes, p, &old_status);
#ifdef ASSERT
if (!ret) {
int err = os::get_last_error();
char buf[256];
size_t buf_len = os::lasterror(buf, sizeof(buf));
< prev index next >