Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2)

Side by Side Diff: src/heap/spaces.cc

Issue 1086253004: If a code space commit partially succeeds, free the memory (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #include "src/base/bits.h" 7 #include "src/base/bits.h"
8 #include "src/base/platform/platform.h" 8 #include "src/base/platform/platform.h"
9 #include "src/full-codegen.h" 9 #include "src/full-codegen.h"
10 #include "src/heap/mark-compact.h" 10 #include "src/heap/mark-compact.h"
(...skipping 857 matching lines...) Expand 10 before | Expand all | Expand 10 after
868 // We are guarding code pages: the last OS page will be protected as 868 // We are guarding code pages: the last OS page will be protected as
869 // non-writable. 869 // non-writable.
870 return Page::kPageSize - static_cast<int>(base::OS::CommitPageSize()); 870 return Page::kPageSize - static_cast<int>(base::OS::CommitPageSize());
871 } 871 }
872 872
873 873
874 bool MemoryAllocator::CommitExecutableMemory(base::VirtualMemory* vm, 874 bool MemoryAllocator::CommitExecutableMemory(base::VirtualMemory* vm,
875 Address start, size_t commit_size, 875 Address start, size_t commit_size,
876 size_t reserved_size) { 876 size_t reserved_size) {
877 // Commit page header (not executable). 877 // Commit page header (not executable).
878 if (!vm->Commit(start, CodePageGuardStartOffset(), false)) { 878 Address header = start;
879 return false; 879 size_t header_size = CodePageGuardStartOffset();
880 if (vm->Commit(header, header_size, false)) {
881 // Create guard page after the header.
882 if (vm->Guard(start + CodePageGuardStartOffset())) {
883 // Commit page body (executable).
884 Address body = start + CodePageAreaStartOffset();
885 size_t body_size = commit_size - CodePageGuardStartOffset();
886 if (vm->Commit(body, body_size, true)) {
887 // Create guard page before the end.
888 if (vm->Guard(start + reserved_size - CodePageGuardSize())) {
889 UpdateAllocatedSpaceLimits(start, start + CodePageAreaStartOffset() +
890 commit_size -
891 CodePageGuardStartOffset());
892 return true;
893 }
894 vm->Uncommit(body, body_size);
895 }
896 }
897 vm->Uncommit(header, header_size);
880 } 898 }
881 899 return false;
882 // Create guard page after the header.
883 if (!vm->Guard(start + CodePageGuardStartOffset())) {
884 return false;
885 }
886
887 // Commit page body (executable).
888 if (!vm->Commit(start + CodePageAreaStartOffset(),
889 commit_size - CodePageGuardStartOffset(), true)) {
890 return false;
891 }
892
893 // Create guard page before the end.
894 if (!vm->Guard(start + reserved_size - CodePageGuardSize())) {
895 return false;
896 }
897
898 UpdateAllocatedSpaceLimits(start, start + CodePageAreaStartOffset() +
899 commit_size -
900 CodePageGuardStartOffset());
901 return true;
902 } 900 }
903 901
904 902
905 // ----------------------------------------------------------------------------- 903 // -----------------------------------------------------------------------------
906 // MemoryChunk implementation 904 // MemoryChunk implementation
907 905
908 void MemoryChunk::IncrementLiveBytesFromMutator(Address address, int by) { 906 void MemoryChunk::IncrementLiveBytesFromMutator(Address address, int by) {
909 MemoryChunk* chunk = MemoryChunk::FromAddress(address); 907 MemoryChunk* chunk = MemoryChunk::FromAddress(address);
910 if (!chunk->InNewSpace() && !static_cast<Page*>(chunk)->WasSwept()) { 908 if (!chunk->InNewSpace() && !static_cast<Page*>(chunk)->WasSwept()) {
911 static_cast<PagedSpace*>(chunk->owner())->IncrementUnsweptFreeBytes(-by); 909 static_cast<PagedSpace*>(chunk->owner())->IncrementUnsweptFreeBytes(-by);
(...skipping 2212 matching lines...) Expand 10 before | Expand all | Expand 10 after
3124 object->ShortPrint(); 3122 object->ShortPrint();
3125 PrintF("\n"); 3123 PrintF("\n");
3126 } 3124 }
3127 printf(" --------------------------------------\n"); 3125 printf(" --------------------------------------\n");
3128 printf(" Marked: %x, LiveCount: %x\n", mark_size, LiveBytes()); 3126 printf(" Marked: %x, LiveCount: %x\n", mark_size, LiveBytes());
3129 } 3127 }
3130 3128
3131 #endif // DEBUG 3129 #endif // DEBUG
3132 } 3130 }
3133 } // namespace v8::internal 3131 } // namespace v8::internal
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698