Index: src/heap/spaces.cc |
diff --git a/src/heap/spaces.cc b/src/heap/spaces.cc |
index af04b5229e99ba7fcb8ef0a0bbcc2828777b0e0e..5e78c6aef8408994484a4e555396cb5d75a80979 100644 |
--- a/src/heap/spaces.cc |
+++ b/src/heap/spaces.cc |
@@ -875,30 +875,28 @@ bool MemoryAllocator::CommitExecutableMemory(base::VirtualMemory* vm, |
Address start, size_t commit_size, |
size_t reserved_size) { |
// Commit page header (not executable). |
- if (!vm->Commit(start, CodePageGuardStartOffset(), false)) { |
- return false; |
- } |
- |
- // Create guard page after the header. |
- if (!vm->Guard(start + CodePageGuardStartOffset())) { |
- return false; |
- } |
- |
- // Commit page body (executable). |
- if (!vm->Commit(start + CodePageAreaStartOffset(), |
- commit_size - CodePageGuardStartOffset(), true)) { |
- return false; |
- } |
- |
- // Create guard page before the end. |
- if (!vm->Guard(start + reserved_size - CodePageGuardSize())) { |
- return false; |
+ Address header = start; |
+ size_t header_size = CodePageGuardStartOffset(); |
+ if (vm->Commit(header, header_size, false)) { |
+ // Create guard page after the header. |
+ if (vm->Guard(start + CodePageGuardStartOffset())) { |
+ // Commit page body (executable). |
+ Address body = start + CodePageAreaStartOffset(); |
+ size_t body_size = commit_size - CodePageGuardStartOffset(); |
+ if (vm->Commit(body, body_size, true)) { |
+ // Create guard page before the end. |
+ if (vm->Guard(start + reserved_size - CodePageGuardSize())) { |
+ UpdateAllocatedSpaceLimits(start, start + CodePageAreaStartOffset() + |
+ commit_size - |
+ CodePageGuardStartOffset()); |
+ return true; |
+ } |
+ vm->Uncommit(body, body_size); |
+ } |
+ } |
+ vm->Uncommit(header, header_size); |
} |
- |
- UpdateAllocatedSpaceLimits(start, start + CodePageAreaStartOffset() + |
- commit_size - |
- CodePageGuardStartOffset()); |
- return true; |
+ return false; |
} |