| 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;
|
| }
|
|
|
|
|
|
|