| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 #include "src/api.h" | 5 #include "src/api.h" |
| 6 | 6 |
| 7 #include <string.h> // For memcpy, strlen. | 7 #include <string.h> // For memcpy, strlen. |
| 8 #ifdef V8_USE_ADDRESS_SANITIZER | 8 #ifdef V8_USE_ADDRESS_SANITIZER |
| 9 #include <sanitizer/asan_interface.h> | 9 #include <sanitizer/asan_interface.h> |
| 10 #endif // V8_USE_ADDRESS_SANITIZER | 10 #endif // V8_USE_ADDRESS_SANITIZER |
| (...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 267 void i::FatalProcessOutOfMemory(const char* location) { | 267 void i::FatalProcessOutOfMemory(const char* location) { |
| 268 i::V8::FatalProcessOutOfMemory(location, false); | 268 i::V8::FatalProcessOutOfMemory(location, false); |
| 269 } | 269 } |
| 270 | 270 |
| 271 // When V8 cannot allocate memory FatalProcessOutOfMemory is called. The default | 271 // When V8 cannot allocate memory FatalProcessOutOfMemory is called. The default |
| 272 // OOM error handler is called and execution is stopped. | 272 // OOM error handler is called and execution is stopped. |
| 273 void i::V8::FatalProcessOutOfMemory(const char* location, bool is_heap_oom) { | 273 void i::V8::FatalProcessOutOfMemory(const char* location, bool is_heap_oom) { |
| 274 i::Isolate* isolate = i::Isolate::Current(); | 274 i::Isolate* isolate = i::Isolate::Current(); |
| 275 char last_few_messages[Heap::kTraceRingBufferSize + 1]; | 275 char last_few_messages[Heap::kTraceRingBufferSize + 1]; |
| 276 char js_stacktrace[Heap::kStacktraceBufferSize + 1]; | 276 char js_stacktrace[Heap::kStacktraceBufferSize + 1]; |
| 277 i::HeapStats heap_stats; |
| 278 |
| 279 if (isolate == nullptr) { |
| 280 // On a background thread -> we cannot retrieve memory information from the |
| 281 // Isolate. Write easy-to-recognize values on the stack. |
| 282 memset(last_few_messages, 0x0badc0de, Heap::kTraceRingBufferSize + 1); |
| 283 memset(js_stacktrace, 0x0badc0de, Heap::kStacktraceBufferSize + 1); |
| 284 memset(&heap_stats, 0xbadc0de, sizeof(heap_stats)); |
| 285 // Note that the embedder's oom handler won't be called in this case. We |
| 286 // just crash. |
| 287 FATAL("API fatal error handler returned after process out of memory"); |
| 288 return; |
| 289 } |
| 290 |
| 277 memset(last_few_messages, 0, Heap::kTraceRingBufferSize + 1); | 291 memset(last_few_messages, 0, Heap::kTraceRingBufferSize + 1); |
| 278 memset(js_stacktrace, 0, Heap::kStacktraceBufferSize + 1); | 292 memset(js_stacktrace, 0, Heap::kStacktraceBufferSize + 1); |
| 279 | 293 |
| 280 i::HeapStats heap_stats; | |
| 281 intptr_t start_marker; | 294 intptr_t start_marker; |
| 282 heap_stats.start_marker = &start_marker; | 295 heap_stats.start_marker = &start_marker; |
| 283 size_t new_space_size; | 296 size_t new_space_size; |
| 284 heap_stats.new_space_size = &new_space_size; | 297 heap_stats.new_space_size = &new_space_size; |
| 285 size_t new_space_capacity; | 298 size_t new_space_capacity; |
| 286 heap_stats.new_space_capacity = &new_space_capacity; | 299 heap_stats.new_space_capacity = &new_space_capacity; |
| 287 size_t old_space_size; | 300 size_t old_space_size; |
| 288 heap_stats.old_space_size = &old_space_size; | 301 heap_stats.old_space_size = &old_space_size; |
| 289 size_t old_space_capacity; | 302 size_t old_space_capacity; |
| 290 heap_stats.old_space_capacity = &old_space_capacity; | 303 heap_stats.old_space_capacity = &old_space_capacity; |
| (...skipping 9124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9415 Address callback_address = | 9428 Address callback_address = |
| 9416 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); | 9429 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); |
| 9417 VMState<EXTERNAL> state(isolate); | 9430 VMState<EXTERNAL> state(isolate); |
| 9418 ExternalCallbackScope call_scope(isolate, callback_address); | 9431 ExternalCallbackScope call_scope(isolate, callback_address); |
| 9419 callback(info); | 9432 callback(info); |
| 9420 } | 9433 } |
| 9421 | 9434 |
| 9422 | 9435 |
| 9423 } // namespace internal | 9436 } // namespace internal |
| 9424 } // namespace v8 | 9437 } // namespace v8 |
| OLD | NEW |