summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/jni/Android.bp16
-rw-r--r--core/jni/AndroidRuntime.cpp30
-rw-r--r--core/jni/include_threads/android_runtime/threads.h30
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"