From 620d9c919504d9d7af94366fa22730f139a991db Mon Sep 17 00:00:00 2001 From: Magnus Jedvert Date: Mon, 13 Nov 2017 22:31:47 +0100 Subject: [PATCH] Move InitClassLoader from JNI_OnLoad to LoadGlobalClassReferenceHolder This fixes clients with custom JNI_OnLoad code. This is basically a reland of https://webrtc-review.googlesource.com/21281, but called from LoadGlobalClassReferenceHolder instead of InitGlobalJniVariables. The problem it solves is that some clients call InitGlobalJniVariables from a strange thread and without using the rest of our Java API. TBR=lliuu@@webrtc.org,sakal@webrtc.org Bug: webrtc:8278 Change-Id: I664e50920bcd7e087ec2d8bb5be13569e8ff3088 Reviewed-on: https://webrtc-review.googlesource.com/22801 Reviewed-by: Magnus Jedvert Commit-Queue: Magnus Jedvert Cr-Commit-Position: refs/heads/master@{#20663} --- sdk/android/src/jni/classreferenceholder.cc | 7 ++++++- sdk/android/src/jni/jni_onload.cc | 3 --- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/sdk/android/src/jni/classreferenceholder.cc b/sdk/android/src/jni/classreferenceholder.cc index 0aa3e627a2..29295b6840 100644 --- a/sdk/android/src/jni/classreferenceholder.cc +++ b/sdk/android/src/jni/classreferenceholder.cc @@ -9,6 +9,7 @@ */ #include "sdk/android/src/jni/classreferenceholder.h" +#include "sdk/android/src/jni/class_loader.h" #include "sdk/android/src/jni/jni_helpers.h" namespace webrtc { @@ -34,8 +35,12 @@ class ClassReferenceHolder { static ClassReferenceHolder* g_class_reference_holder = nullptr; void LoadGlobalClassReferenceHolder() { + JNIEnv* env = GetEnv(); RTC_CHECK(g_class_reference_holder == nullptr); - g_class_reference_holder = new ClassReferenceHolder(GetEnv()); + g_class_reference_holder = new ClassReferenceHolder(env); + // TODO(magjed): This is a weird place to call the other class loader from, + // but the only place that will keep backwards compatibility. + InitClassLoader(env); } void FreeGlobalClassReferenceHolder() { diff --git a/sdk/android/src/jni/jni_onload.cc b/sdk/android/src/jni/jni_onload.cc index cb708e7fda..81cc4889c2 100644 --- a/sdk/android/src/jni/jni_onload.cc +++ b/sdk/android/src/jni/jni_onload.cc @@ -13,7 +13,6 @@ #define JNIEXPORT __attribute__((visibility("default"))) #include "rtc_base/ssladapter.h" -#include "sdk/android/src/jni/class_loader.h" #include "sdk/android/src/jni/classreferenceholder.h" #include "sdk/android/src/jni/jni_helpers.h" @@ -28,8 +27,6 @@ extern "C" jint JNIEXPORT JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved) { RTC_CHECK(rtc::InitializeSSL()) << "Failed to InitializeSSL()"; LoadGlobalClassReferenceHolder(); - JNIEnv* env = AttachCurrentThreadIfNeeded(); - InitClassLoader(env); return ret; }