diff --git a/ReactAndroid/src/main/java/com/facebook/hermes/reactexecutor/OnLoad.cpp b/ReactAndroid/src/main/java/com/facebook/hermes/reactexecutor/OnLoad.cpp index 0e666e328e0..56a9f589490 100644 --- a/ReactAndroid/src/main/java/com/facebook/hermes/reactexecutor/OnLoad.cpp +++ b/ReactAndroid/src/main/java/com/facebook/hermes/reactexecutor/OnLoad.cpp @@ -7,7 +7,9 @@ #include <../instrumentation/HermesMemoryDumper.h> #include +#include #include +#include #include #include #include @@ -21,6 +23,13 @@ namespace facebook { namespace react { +static void hermesFatalHandler(const std::string &reason) { + LOG(ERROR) << "Hermes Fatal: " << reason << "\n"; + __android_log_assert(nullptr, "Hermes", "%s", reason.c_str()); +} + +static std::once_flag flag; + static ::hermes::vm::RuntimeConfig makeRuntimeConfig(jlong heapSizeMB) { namespace vm = ::hermes::vm; auto gcConfigBuilder = @@ -62,6 +71,9 @@ class HermesExecutorHolder jni::alias_ref) { JReactMarker::setLogPerfMarkerIfNeeded(); + std::call_once(flag, []() { + facebook::hermes::HermesRuntime::setFatalHandler(hermesFatalHandler); + }); return makeCxxInstance( std::make_unique(installBindings)); } @@ -71,6 +83,9 @@ class HermesExecutorHolder jlong heapSizeMB) { JReactMarker::setLogPerfMarkerIfNeeded(); auto runtimeConfig = makeRuntimeConfig(heapSizeMB); + std::call_once(flag, []() { + facebook::hermes::HermesRuntime::setFatalHandler(hermesFatalHandler); + }); return makeCxxInstance(std::make_unique( installBindings, JSIExecutor::defaultTimeoutInvoker, runtimeConfig)); }