PreReservedVirtualAllocWrapper::~PreReservedVirtualAllocWrapper() { if (IsPreReservedRegionPresent()) { BOOL success = VirtualFree(preReservedStartAddress, 0, MEM_RELEASE); PreReservedHeapTrace(_u("MEM_RELEASE the PreReservedSegment. Start Address: 0x%p, Size: 0x%x * 0x%x bytes"), preReservedStartAddress, PreReservedAllocationSegmentCount, AutoSystemInfo::Data.GetAllocationGranularityPageSize()); if (!success) { // OOP JIT TODO: check if we need to cleanup the context related to this content process } #if !TARGET_64 && _CONTROL_FLOW_GUARD Assert(numPreReservedSegment > 0); InterlockedDecrement(&PreReservedVirtualAllocWrapper::numPreReservedSegment); #endif } }
PreReservedVirtualAllocWrapper::~PreReservedVirtualAllocWrapper() { Assert(this); if (IsPreReservedRegionPresent()) { BOOL success = VirtualFree(preReservedStartAddress, 0, MEM_RELEASE); PreReservedHeapTrace(_u("MEM_RELEASE the PreReservedSegment. Start Address: 0x%p, Size: 0x%x * 0x%x bytes"), preReservedStartAddress, PreReservedAllocationSegmentCount, AutoSystemInfo::Data.GetAllocationGranularityPageSize()); if (!success) { Assert(false); } #if !_M_X64_OR_ARM64 && _CONTROL_FLOW_GUARD Assert(numPreReservedSegment > 0); InterlockedDecrement(&PreReservedVirtualAllocWrapper::numPreReservedSegment); #endif } }
LPVOID PreReservedVirtualAllocWrapper::GetPreReservedEndAddress() { Assert(this && IsPreReservedRegionPresent()); return (char*)preReservedStartAddress + (PreReservedAllocationSegmentCount * AutoSystemInfo::Data.GetAllocationGranularityPageCount() * AutoSystemInfo::PageSize); }
LPVOID PreReservedVirtualAllocWrapper::GetPreReservedEndAddress() { Assert(IsPreReservedRegionPresent()); return GetPreReservedEndAddress(preReservedStartAddress); }