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

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

Issue 2689683002: [heap] Fix address space leak in Unmapper (Closed)
Patch Set: Created 3 years, 10 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
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 #ifndef V8_HEAP_SPACES_H_ 5 #ifndef V8_HEAP_SPACES_H_
6 #define V8_HEAP_SPACES_H_ 6 #define V8_HEAP_SPACES_H_
7 7
8 #include <list> 8 #include <list>
9 #include <memory> 9 #include <memory>
10 #include <unordered_set> 10 #include <unordered_set>
(...skipping 1079 matching lines...) Expand 10 before | Expand all | Expand 10 after
1090 STATIC_ASSERT(Page::kPageSize % kRegionSize == 0); 1090 STATIC_ASSERT(Page::kPageSize % kRegionSize == 0);
1091 1091
1092 Address starts_[kSize]; 1092 Address starts_[kSize];
1093 }; 1093 };
1094 1094
1095 1095
1096 // ---------------------------------------------------------------------------- 1096 // ----------------------------------------------------------------------------
1097 // A space acquires chunks of memory from the operating system. The memory 1097 // A space acquires chunks of memory from the operating system. The memory
1098 // allocator allocates and deallocates pages for the paged heap spaces and large 1098 // allocator allocates and deallocates pages for the paged heap spaces and large
1099 // pages for large object space. 1099 // pages for large object space.
1100 class MemoryAllocator { 1100 class V8_EXPORT_PRIVATE MemoryAllocator {
1101 public: 1101 public:
1102 // Unmapper takes care of concurrently unmapping and uncommitting memory 1102 // Unmapper takes care of concurrently unmapping and uncommitting memory
1103 // chunks. 1103 // chunks.
1104 class Unmapper { 1104 class Unmapper {
1105 public: 1105 public:
1106 class UnmapFreeMemoryTask; 1106 class UnmapFreeMemoryTask;
1107 1107
1108 explicit Unmapper(MemoryAllocator* allocator) 1108 explicit Unmapper(MemoryAllocator* allocator)
1109 : allocator_(allocator), 1109 : allocator_(allocator),
1110 pending_unmapping_tasks_semaphore_(0), 1110 pending_unmapping_tasks_semaphore_(0),
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
1185 friend class MemoryAllocator; 1185 friend class MemoryAllocator;
1186 }; 1186 };
1187 1187
1188 enum AllocationMode { 1188 enum AllocationMode {
1189 kRegular, 1189 kRegular,
1190 kPooled, 1190 kPooled,
1191 }; 1191 };
1192 1192
1193 enum FreeMode { 1193 enum FreeMode {
1194 kFull, 1194 kFull,
1195 kAlreadyPooled,
1195 kPreFreeAndQueue, 1196 kPreFreeAndQueue,
1196 kPooledAndQueue, 1197 kPooledAndQueue,
1197 }; 1198 };
1198 1199
1199 static size_t CodePageGuardStartOffset(); 1200 static size_t CodePageGuardStartOffset();
1200 1201
1201 static size_t CodePageGuardSize(); 1202 static size_t CodePageGuardSize();
1202 1203
1203 static size_t CodePageAreaStartOffset(); 1204 static size_t CodePageAreaStartOffset();
1204 1205
(...skipping 436 matching lines...) Expand 10 before | Expand all | Expand 10 after
1641 // 11-31 words (tiny): The tiny blocks are only used for allocation, when 1642 // 11-31 words (tiny): The tiny blocks are only used for allocation, when
1642 // categories >= small do not have entries anymore. 1643 // categories >= small do not have entries anymore.
1643 // 32-255 words (small): Used for allocating free space between 1-31 words in 1644 // 32-255 words (small): Used for allocating free space between 1-31 words in
1644 // size. 1645 // size.
1645 // 256-2047 words (medium): Used for allocating free space between 32-255 words 1646 // 256-2047 words (medium): Used for allocating free space between 32-255 words
1646 // in size. 1647 // in size.
1647 // 1048-16383 words (large): Used for allocating free space between 256-2047 1648 // 1048-16383 words (large): Used for allocating free space between 256-2047
1648 // words in size. 1649 // words in size.
1649 // At least 16384 words (huge): This list is for objects of 2048 words or 1650 // At least 16384 words (huge): This list is for objects of 2048 words or
1650 // larger. Empty pages are also added to this list. 1651 // larger. Empty pages are also added to this list.
1651 class FreeList { 1652 class V8_EXPORT_PRIVATE FreeList {
1652 public: 1653 public:
1653 // This method returns how much memory can be allocated after freeing 1654 // This method returns how much memory can be allocated after freeing
1654 // maximum_freed memory. 1655 // maximum_freed memory.
1655 static inline size_t GuaranteedAllocatable(size_t maximum_freed) { 1656 static inline size_t GuaranteedAllocatable(size_t maximum_freed) {
1656 if (maximum_freed <= kTiniestListMax) { 1657 if (maximum_freed <= kTiniestListMax) {
1657 // Since we are not iterating over all list entries, we cannot guarantee 1658 // Since we are not iterating over all list entries, we cannot guarantee
1658 // that we can find the maximum freed block in that free list. 1659 // that we can find the maximum freed block in that free list.
1659 return 0; 1660 return 0;
1660 } else if (maximum_freed <= kTinyListMax) { 1661 } else if (maximum_freed <= kTinyListMax) {
1661 return kTinyAllocationMax; 1662 return kTinyAllocationMax;
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after
1878 1879
1879 private: 1880 private:
1880 LocalAllocationBuffer(Heap* heap, AllocationInfo allocation_info); 1881 LocalAllocationBuffer(Heap* heap, AllocationInfo allocation_info);
1881 1882
1882 void Close(); 1883 void Close();
1883 1884
1884 Heap* heap_; 1885 Heap* heap_;
1885 AllocationInfo allocation_info_; 1886 AllocationInfo allocation_info_;
1886 }; 1887 };
1887 1888
1888 class PagedSpace : public Space { 1889 class V8_EXPORT_PRIVATE PagedSpace : public Space {
1889 public: 1890 public:
1890 typedef PageIterator iterator; 1891 typedef PageIterator iterator;
1891 1892
1892 static const intptr_t kCompactionMemoryWanted = 500 * KB; 1893 static const intptr_t kCompactionMemoryWanted = 500 * KB;
1893 1894
1894 // Creates a space with an id. 1895 // Creates a space with an id.
1895 PagedSpace(Heap* heap, AllocationSpace id, Executability executable); 1896 PagedSpace(Heap* heap, AllocationSpace id, Executability executable);
1896 1897
1897 ~PagedSpace() override { TearDown(); } 1898 ~PagedSpace() override { TearDown(); }
1898 1899
(...skipping 998 matching lines...) Expand 10 before | Expand all | Expand 10 after
2897 PageIterator old_iterator_; 2898 PageIterator old_iterator_;
2898 PageIterator code_iterator_; 2899 PageIterator code_iterator_;
2899 PageIterator map_iterator_; 2900 PageIterator map_iterator_;
2900 LargePageIterator lo_iterator_; 2901 LargePageIterator lo_iterator_;
2901 }; 2902 };
2902 2903
2903 } // namespace internal 2904 } // namespace internal
2904 } // namespace v8 2905 } // namespace v8
2905 2906
2906 #endif // V8_HEAP_SPACES_H_ 2907 #endif // V8_HEAP_SPACES_H_
OLDNEW
« no previous file with comments | « src/heap/incremental-marking.h ('k') | src/heap/spaces.cc » ('j') | src/heap/spaces.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698