| Index: src/api.cc
|
| diff --git a/src/api.cc b/src/api.cc
|
| index 352b63dfcac810c01a743edbac698a77214da53c..0563443b8bdf1248a2b3bf78bd837bceb406c6d2 100644
|
| --- a/src/api.cc
|
| +++ b/src/api.cc
|
| @@ -128,8 +128,13 @@ namespace v8 {
|
|
|
| static void DefaultFatalErrorHandler(const char* location,
|
| const char* message) {
|
| - i::VMState __state__(i::Isolate::Current(), i::OTHER);
|
| - API_Fatal(location, message);
|
| + i::Isolate* isolate = i::Isolate::Current();
|
| + if (isolate->IsInitialized()) {
|
| + i::VMState __state__(isolate, i::OTHER);
|
| + API_Fatal(location, message);
|
| + } else {
|
| + API_Fatal(location, message);
|
| + }
|
| }
|
|
|
|
|
| @@ -202,15 +207,21 @@ void i::V8::FatalProcessOutOfMemory(const char* location, bool take_snapshot) {
|
| int end_marker;
|
| heap_stats.end_marker = &end_marker;
|
| i::Isolate* isolate = i::Isolate::Current();
|
| - // BUG(1718):
|
| - // Don't use the take_snapshot since we don't support HeapIterator here
|
| - // without doing a special GC.
|
| - isolate->heap()->RecordStats(&heap_stats, false);
|
| + if (isolate->heap()->HasBeenSetUp()) {
|
| + // BUG(1718): Don't use the take_snapshot since we don't support
|
| + // HeapIterator here without doing a special GC.
|
| + isolate->heap()->RecordStats(&heap_stats, false);
|
| + }
|
| i::V8::SetFatalError();
|
| FatalErrorCallback callback = GetFatalErrorHandler();
|
| + const char* message = "Allocation failed - process out of memory";
|
| {
|
| - LEAVE_V8(isolate);
|
| - callback(location, "Allocation failed - process out of memory");
|
| + if (isolate->IsInitialized()) {
|
| + LEAVE_V8(isolate);
|
| + callback(location, message);
|
| + } else {
|
| + callback(location, message);
|
| + }
|
| }
|
| // If the callback returns, we stop execution.
|
| UNREACHABLE();
|
|
|