} // namespace
CrashReporterWin::CrashReporterWin()
- : skip_system_crash_handler_(false) {
+ : skip_system_crash_handler_(false),
+ code_range_registered_(false) {
}
CrashReporterWin::~CrashReporterWin() {
LOG(ERROR) << "Cannot initialize out-of-process crash handler";
#ifdef _WIN64
- bool registered = false;
// Hook up V8 to breakpad.
- {
+ if (!code_range_registered_) {
// gin::Debug::SetCodeRangeCreatedCallback only runs the callback when
// Isolate is just created, so we have to manually run following code here.
void* code_range = nullptr;
size_t size = 0;
v8::Isolate::GetCurrent()->GetCodeRange(&code_range, &size);
- if (code_range && size)
- registered = RegisterNonABICompliantCodeRange(code_range, size);
+ if (code_range && size &&
+ RegisterNonABICompliantCodeRange(code_range, size)) {
+ code_range_registered_ = true;
+ gin::Debug::SetCodeRangeDeletedCallback(
+ UnregisterNonABICompliantCodeRange);
+ }
}
- if (registered)
- gin::Debug::SetCodeRangeDeletedCallback(UnregisterNonABICompliantCodeRange);
#endif
}
google_breakpad::CustomClientInfo custom_info_;
bool skip_system_crash_handler_;
+ bool code_range_registered_;
std::unique_ptr<google_breakpad::ExceptionHandler> breakpad_;
DISALLOW_COPY_AND_ASSIGN(CrashReporterWin);