Index: runtime/vm/virtual_memory_win.cc |
diff --git a/runtime/vm/virtual_memory_win.cc b/runtime/vm/virtual_memory_win.cc |
index 43a50c9bca591cc57489320f66210cc9feb8ba01..25846136a996007789204103b8fc3aba808b33ed 100644 |
--- a/runtime/vm/virtual_memory_win.cc |
+++ b/runtime/vm/virtual_memory_win.cc |
@@ -35,20 +35,20 @@ VirtualMemory* VirtualMemory::ReserveInternal(intptr_t size) { |
VirtualMemory::~VirtualMemory() { |
- if (embedder_allocated()) { |
+ if (embedder_allocated() || (reserved_size_ == 0)) { |
return; |
} |
if (VirtualFree(address(), 0, MEM_RELEASE) == 0) { |
- FATAL1("VirtualFree failed: Error code %d\n", GetLastError()); |
+ FATAL("VirtualFree failed"); |
} |
} |
bool VirtualMemory::FreeSubSegment(void* address, intptr_t size) { |
- if (VirtualFree(address, size, MEM_DECOMMIT) == 0) { |
- FATAL1("VirtualFree failed: Error code %d\n", GetLastError()); |
- } |
- return true; |
+ // On Windows only the entire segment returned by VirtualAlloc |
+ // can be freed. Therefore we will have to waste these unused |
+ // virtual memory sub-segments. |
+ return false; |
} |