From 4584d339216867a3d14a83ccbb3b29c1d2291ee8 Mon Sep 17 00:00:00 2001 From: Janic Duplessis Date: Sun, 2 Jan 2022 09:57:15 -0500 Subject: [PATCH] fix: Fix JNI crash in FrameHostObject dtor (#689) --- android/src/main/cpp/FrameHostObject.cpp | 4 ++-- android/src/main/cpp/FrameHostObject.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/android/src/main/cpp/FrameHostObject.cpp b/android/src/main/cpp/FrameHostObject.cpp index 7a003cf..b7d02cd 100644 --- a/android/src/main/cpp/FrameHostObject.cpp +++ b/android/src/main/cpp/FrameHostObject.cpp @@ -13,14 +13,14 @@ namespace vision { using namespace facebook; -FrameHostObject::FrameHostObject(jni::alias_ref image): frame(make_local(image)) { } +FrameHostObject::FrameHostObject(jni::alias_ref image): frame(make_global(image)) { } FrameHostObject::~FrameHostObject() { // Hermes' Garbage Collector (Hades GC) calls destructors on a separate Thread // which might not be attached to JNI. Ensure that we use the JNI class loader when // deallocating the `frame` HybridClass, because otherwise JNI cannot call the Java // destroy() function. - jni::ThreadScope::WithClassLoader([=] { frame.reset(); }); + jni::ThreadScope::WithClassLoader([&] { frame.reset(); }); } std::vector FrameHostObject::getPropertyNames(jsi::Runtime& rt) { diff --git a/android/src/main/cpp/FrameHostObject.h b/android/src/main/cpp/FrameHostObject.h index 896e870..90fcf01 100644 --- a/android/src/main/cpp/FrameHostObject.h +++ b/android/src/main/cpp/FrameHostObject.h @@ -28,7 +28,7 @@ class JSI_EXPORT FrameHostObject : public jsi::HostObject { void close(); public: - jni::local_ref frame; + jni::global_ref frame; private: static auto constexpr TAG = "VisionCamera";