Commit 1ef7487b authored by richard_chamberlain's avatar richard_chamberlain Committed by Commit bot

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}
parent e298646b
......@@ -241,7 +241,7 @@ void i::FatalProcessOutOfMemory(const char* location) {
// When V8 cannot allocated memory FatalProcessOutOfMemory is called.
// The default fatal error handler is called and execution is stopped.
void i::V8::FatalProcessOutOfMemory(const char* location, bool take_snapshot) {
void i::V8::FatalProcessOutOfMemory(const char* location, bool is_heap_oom) {
i::Isolate* isolate = i::Isolate::Current();
char last_few_messages[Heap::kTraceRingBufferSize + 1];
char js_stacktrace[Heap::kStacktraceBufferSize + 1];
......@@ -303,7 +303,9 @@ void i::V8::FatalProcessOutOfMemory(const char* location, bool take_snapshot) {
PrintF("\n<--- Last few GCs --->\n%s\n", first_newline);
PrintF("\n<--- JS stacktrace --->\n%s\n", js_stacktrace);
}
Utils::ApiCheck(false, location, "Allocation failed - process out of memory");
Utils::ApiCheck(false, location, is_heap_oom
? "Allocation failed - JavaScript heap out of memory"
: "Allocation failed - process out of memory");
// If the fatal error handler returns, we stop execution.
FATAL("API fatal error handler returned after process out of memory");
}
......
......@@ -3977,8 +3977,7 @@ AllocationResult Heap::AllocateUninitializedFixedDoubleArray(
AllocationResult Heap::AllocateRawFixedDoubleArray(int length,
PretenureFlag pretenure) {
if (length < 0 || length > FixedDoubleArray::kMaxLength) {
v8::internal::Heap::FatalProcessOutOfMemory("invalid array length",
kDoubleAligned);
v8::internal::Heap::FatalProcessOutOfMemory("invalid array length", true);
}
int size = FixedDoubleArray::SizeFor(length);
AllocationSpace space = SelectSpace(pretenure);
......@@ -5611,9 +5610,8 @@ void Heap::CompactRetainedMaps(ArrayList* retained_maps) {
if (new_length != length) retained_maps->SetLength(new_length);
}
void Heap::FatalProcessOutOfMemory(const char* location, bool take_snapshot) {
v8::internal::V8::FatalProcessOutOfMemory(location, take_snapshot);
void Heap::FatalProcessOutOfMemory(const char* location, bool is_heap_oom) {
v8::internal::V8::FatalProcessOutOfMemory(location, is_heap_oom);
}
#ifdef DEBUG
......
......@@ -566,7 +566,7 @@ class Heap {
static inline bool IsOneByte(T t, int chars);
static void FatalProcessOutOfMemory(const char* location,
bool take_snapshot = false);
bool is_heap_oom = false);
static bool RootIsImmortalImmovable(int root_index);
......
......@@ -1728,8 +1728,8 @@ class MarkCompactCollector::EvacuateNewSpaceVisitor final
compaction_spaces_->Get(OLD_SPACE)->AllocateRaw(size_in_bytes,
alignment);
if (allocation.IsRetry()) {
FatalProcessOutOfMemory(
"MarkCompactCollector: semi-space copy, fallback in old gen\n");
v8::internal::Heap::FatalProcessOutOfMemory(
"MarkCompactCollector: semi-space copy, fallback in old gen", true);
}
return allocation;
}
......
......@@ -21,7 +21,7 @@ class V8 : public AllStatic {
// Report process out of memory. Implementation found in api.cc.
// This function will not return, but will terminate the execution.
static void FatalProcessOutOfMemory(const char* location,
bool take_snapshot = false);
bool is_heap_oom = false);
static void InitializePlatform(v8::Platform* platform);
static void ShutdownPlatform();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment