From 72d29ee7d7e1fc9aa87aaafebef5bd911e60d168 Mon Sep 17 00:00:00 2001 From: Riley Dulin Date: Mon, 7 Dec 2020 15:41:08 -0800 Subject: [PATCH] Destroy jni::global_ref while inside a ThreadScope Summary: The `BlobCollector` native module stored a `jni::global_ref` as a member, and its destructor automatically destroys it. However, as noted in JSI documentation, there is no guarantee that the destructor is run on a JVM-registered thread. The destructor knew this and used a `jni::ThreadScope` to do some other JNI behavior, but the global_ref needs to be destroyed during that ThreadScope as well. Changelog: [Internal] Reviewed By: neildhar Differential Revision: D25372698 fbshipit-source-id: f4eba0b2da154c6eac54d7faeb9ea5bb9260bec9 --- .../java/com/facebook/react/modules/blob/jni/BlobCollector.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/ReactAndroid/src/main/java/com/facebook/react/modules/blob/jni/BlobCollector.cpp b/ReactAndroid/src/main/java/com/facebook/react/modules/blob/jni/BlobCollector.cpp index 8883a318d89..285e881472a 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/modules/blob/jni/BlobCollector.cpp +++ b/ReactAndroid/src/main/java/com/facebook/react/modules/blob/jni/BlobCollector.cpp @@ -29,6 +29,7 @@ BlobCollector::~BlobCollector() { static auto removeMethod = jni::findClassStatic(kBlobModuleJavaDescriptor) ->getMethod("remove"); removeMethod(blobModule_, jni::make_jstring(blobId_).get()); + blobModule_.reset(); }); }