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

Unified Diff: Source/platform/heap/HeapPage.cpp

Issue 1320493006: Oilpan: Add a RELEASE_ASSERT to catch out-of-virtual-address-space errors (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/platform/heap/HeapPage.cpp
diff --git a/Source/platform/heap/HeapPage.cpp b/Source/platform/heap/HeapPage.cpp
index 24fb4dd15e91859d0e662b360b63ad7bee69e8c2..7733e6875fa651b1ef1e793a532c5a26cac8a169 100644
--- a/Source/platform/heap/HeapPage.cpp
+++ b/Source/platform/heap/HeapPage.cpp
@@ -522,6 +522,7 @@ void NormalPageHeap::allocatePage()
threadState()->shouldFlushHeapDoesNotContainCache();
PageMemory* pageMemory = Heap::freePagePool()->takeFreePage(heapIndex());
// We continue allocating page memory until we succeed in committing one.
+ size_t numberOfTrials = 0;
while (!pageMemory) {
// Allocate a memory region for blinkPagesPerRegion pages that
// will each have the following layout.
@@ -531,9 +532,8 @@ void NormalPageHeap::allocatePage()
PageMemoryRegion* region = PageMemoryRegion::allocateNormalPages();
// Setup the PageMemory object for each of the pages in the region.
- size_t offset = 0;
for (size_t i = 0; i < blinkPagesPerRegion; ++i) {
- PageMemory* memory = PageMemory::setupPageMemoryInRegion(region, offset, blinkPagePayloadSize());
+ PageMemory* memory = PageMemory::setupPageMemoryInRegion(region, i * blinkPageSize, blinkPagePayloadSize());
// Take the first possible page ensuring that this thread actually
// gets a page and add the rest to the page pool.
if (!pageMemory) {
@@ -544,8 +544,12 @@ void NormalPageHeap::allocatePage()
} else {
Heap::freePagePool()->addFreePage(heapIndex(), memory);
}
- offset += blinkPageSize;
}
+ ++numberOfTrials;
+ // If you hit the ASSERT, it means that you're hitting the limit of
+ // the number of mmapped regions OS can support
+ // (e.g., /proc/sys/vm/max_map_count in Linux).
+ RELEASE_ASSERT(numberOfTrials < 64);
sof 2015/09/08 05:30:34 Could you explain a bit more what you were seeing?
haraken 2015/09/08 05:35:19 The above memory->commit() starts failing (because
sof 2015/09/08 06:25:57 And once it does & that OS' limit is reached, the
haraken 2015/09/08 06:33:14 Right. BTW, do you have any idea on why we have a
sof 2015/09/08 06:59:17 Yes, it looks out of place to have a loop there no
}
NormalPage* page = new (pageMemory->writableStart()) NormalPage(pageMemory, this);
page->link(&m_firstPage);
« 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