diff options
| -rw-r--r-- | core/jni/Android.bp | 16 | ||||
| -rw-r--r-- | core/jni/AndroidRuntime.cpp | 30 | ||||
| -rw-r--r-- | core/jni/include_threads/android_runtime/threads.h | 30 |
3 files changed, 15 insertions, 61 deletions
diff --git a/core/jni/Android.bp b/core/jni/Android.bp index aae727ddaa59..b236385768b5 100644 --- a/core/jni/Android.bp +++ b/core/jni/Android.bp @@ -297,7 +297,6 @@ cc_library_shared { header_libs: [ "bionic_libc_platform_headers", "dnsproxyd_protocol_headers", - "libandroid_runtime_threads_headers", ], }, host: { @@ -339,18 +338,3 @@ cc_library_shared { never: true, }, } - -cc_library_headers { - name: "libandroid_runtime_threads_headers", - host_supported: true, - vendor_available: true, - // TODO(b/153609531): remove when libbinder is not native_bridge_supported - native_bridge_supported: true, - // Allow only modules from the following list to create threads that can be - // attached to the JVM. This list should be a subset of the dependencies of - // libandroid_runtime. - visibility: [ - "//frameworks/native/libs/binder", - ], - export_include_dirs: ["include_threads"], -} diff --git a/core/jni/AndroidRuntime.cpp b/core/jni/AndroidRuntime.cpp index 1191f5cc13d3..1f15dfd1eb1c 100644 --- a/core/jni/AndroidRuntime.cpp +++ b/core/jni/AndroidRuntime.cpp @@ -22,7 +22,6 @@ #include <android-base/properties.h> #include <android/graphics/jni_runtime.h> #include <android_runtime/AndroidRuntime.h> -#include <android_runtime/threads.h> #include <assert.h> #include <binder/IBinder.h> #include <binder/IPCThreadState.h> @@ -1326,15 +1325,14 @@ void AndroidRuntime::onVmCreated(JNIEnv* env) return env; } -extern "C" { - /* * Makes the current thread visible to the VM. * * The JNIEnv pointer returned is only valid for the current thread, and * thus must be tucked into thread-local storage. */ -bool androidJavaAttachThread(const char* threadName) { +static int javaAttachThread(const char* threadName, JNIEnv** pEnv) +{ JavaVMAttachArgs args; JavaVM* vm; jint result; @@ -1346,17 +1344,18 @@ bool androidJavaAttachThread(const char* threadName) { args.name = (char*) threadName; args.group = NULL; - JNIEnv* env; - result = vm->AttachCurrentThread(&env, (void*)&args); - if (result != JNI_OK) ALOGI("NOTE: attach of thread '%s' failed\n", threadName); + result = vm->AttachCurrentThread(pEnv, (void*) &args); + if (result != JNI_OK) + ALOGI("NOTE: attach of thread '%s' failed\n", threadName); - return result == JNI_OK; + return result; } /* * Detach the current thread from the set visible to the VM. */ -bool androidJavaDetachThread(void) { +static int javaDetachThread(void) +{ JavaVM* vm; jint result; @@ -1364,12 +1363,11 @@ bool androidJavaDetachThread(void) { assert(vm != NULL); result = vm->DetachCurrentThread(); - if (result != JNI_OK) ALOGE("ERROR: thread detach failed\n"); - return result == JNI_OK; + if (result != JNI_OK) + ALOGE("ERROR: thread detach failed\n"); + return result; } -} // extern "C" - /* * When starting a native thread that will be visible from the VM, we * bounce through this to get the right attach/detach action. @@ -1380,16 +1378,18 @@ bool androidJavaDetachThread(void) { void* userData = ((void **)args)[1]; char* name = (char*) ((void **)args)[2]; // we own this storage free(args); + JNIEnv* env; int result; /* hook us into the VM */ - if (!androidJavaAttachThread(name)) return -1; + if (javaAttachThread(name, &env) != JNI_OK) + return -1; /* start the thread running */ result = (*(android_thread_func_t)start)(userData); /* unhook us */ - (void)androidJavaDetachThread(); + javaDetachThread(); free(name); return result; diff --git a/core/jni/include_threads/android_runtime/threads.h b/core/jni/include_threads/android_runtime/threads.h deleted file mode 100644 index a410529724ad..000000000000 --- a/core/jni/include_threads/android_runtime/threads.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (C) 2021 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// Manages the interaction between threads and the Android Runtime. If these symbols do not exist -// at runtime, it means the current process does not link to libandroid_runtime. - -#pragma once - -extern "C" { - -// Attach current thread to JVM. Return true if successful, false otherwise. -bool androidJavaAttachThread(const char* threadName); - -// Detach current thread to JVM. Return true if successful, false otherwise. -bool androidJavaDetachThread(); - -} // extern "C" |