Skip to content

Commit 1ef7487

Browse files
rnchamberlainCommit bot
authored andcommitted
Improved diagnostic message for JS heap out of memory
This patch replaces the unused 'take_snapshot' parameter on FatalProcessOutOfMemory() with a 'is_heap_oom' parameter. The parameter is set to true on error paths where the JS heap is out of memory, as distinct from a malloc() failure i.e. process out of memory. The message output to stderr or passed to embedding applications via FatalErrorCallback is 'Javascript heap out of memory' rather than 'process out of memory'. BUG= R=jochen@chromium.org, verwaest@chromium.org, michael_dawson@ca.ibm.com Review URL: https://codereview.chromium.org/1873443002 Cr-Commit-Position: refs/heads/master@{#35431}
1 parent e298646 commit 1ef7487

File tree

5 files changed

+11
-11
lines changed

5 files changed

+11
-11
lines changed

src/api.cc

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ void i::FatalProcessOutOfMemory(const char* location) {
241241

242242
// When V8 cannot allocated memory FatalProcessOutOfMemory is called.
243243
// The default fatal error handler is called and execution is stopped.
244-
void i::V8::FatalProcessOutOfMemory(const char* location, bool take_snapshot) {
244+
void i::V8::FatalProcessOutOfMemory(const char* location, bool is_heap_oom) {
245245
i::Isolate* isolate = i::Isolate::Current();
246246
char last_few_messages[Heap::kTraceRingBufferSize + 1];
247247
char js_stacktrace[Heap::kStacktraceBufferSize + 1];
@@ -303,7 +303,9 @@ void i::V8::FatalProcessOutOfMemory(const char* location, bool take_snapshot) {
303303
PrintF("\n<--- Last few GCs --->\n%s\n", first_newline);
304304
PrintF("\n<--- JS stacktrace --->\n%s\n", js_stacktrace);
305305
}
306-
Utils::ApiCheck(false, location, "Allocation failed - process out of memory");
306+
Utils::ApiCheck(false, location, is_heap_oom
307+
? "Allocation failed - JavaScript heap out of memory"
308+
: "Allocation failed - process out of memory");
307309
// If the fatal error handler returns, we stop execution.
308310
FATAL("API fatal error handler returned after process out of memory");
309311
}

src/heap/heap.cc

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3977,8 +3977,7 @@ AllocationResult Heap::AllocateUninitializedFixedDoubleArray(
39773977
AllocationResult Heap::AllocateRawFixedDoubleArray(int length,
39783978
PretenureFlag pretenure) {
39793979
if (length < 0 || length > FixedDoubleArray::kMaxLength) {
3980-
v8::internal::Heap::FatalProcessOutOfMemory("invalid array length",
3981-
kDoubleAligned);
3980+
v8::internal::Heap::FatalProcessOutOfMemory("invalid array length", true);
39823981
}
39833982
int size = FixedDoubleArray::SizeFor(length);
39843983
AllocationSpace space = SelectSpace(pretenure);
@@ -5611,9 +5610,8 @@ void Heap::CompactRetainedMaps(ArrayList* retained_maps) {
56115610
if (new_length != length) retained_maps->SetLength(new_length);
56125611
}
56135612

5614-
5615-
void Heap::FatalProcessOutOfMemory(const char* location, bool take_snapshot) {
5616-
v8::internal::V8::FatalProcessOutOfMemory(location, take_snapshot);
5613+
void Heap::FatalProcessOutOfMemory(const char* location, bool is_heap_oom) {
5614+
v8::internal::V8::FatalProcessOutOfMemory(location, is_heap_oom);
56175615
}
56185616

56195617
#ifdef DEBUG

src/heap/heap.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -566,7 +566,7 @@ class Heap {
566566
static inline bool IsOneByte(T t, int chars);
567567

568568
static void FatalProcessOutOfMemory(const char* location,
569-
bool take_snapshot = false);
569+
bool is_heap_oom = false);
570570

571571
static bool RootIsImmortalImmovable(int root_index);
572572

src/heap/mark-compact.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1728,8 +1728,8 @@ class MarkCompactCollector::EvacuateNewSpaceVisitor final
17281728
compaction_spaces_->Get(OLD_SPACE)->AllocateRaw(size_in_bytes,
17291729
alignment);
17301730
if (allocation.IsRetry()) {
1731-
FatalProcessOutOfMemory(
1732-
"MarkCompactCollector: semi-space copy, fallback in old gen\n");
1731+
v8::internal::Heap::FatalProcessOutOfMemory(
1732+
"MarkCompactCollector: semi-space copy, fallback in old gen", true);
17331733
}
17341734
return allocation;
17351735
}

src/v8.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class V8 : public AllStatic {
2121
// Report process out of memory. Implementation found in api.cc.
2222
// This function will not return, but will terminate the execution.
2323
static void FatalProcessOutOfMemory(const char* location,
24-
bool take_snapshot = false);
24+
bool is_heap_oom = false);
2525

2626
static void InitializePlatform(v8::Platform* platform);
2727
static void ShutdownPlatform();

0 commit comments

Comments
 (0)