diff options
| -rw-r--r-- | core/java/android/os/ServiceManager.java | 7 | ||||
| -rw-r--r-- | core/jni/android_os_ServiceManager.cpp | 16 |
2 files changed, 11 insertions, 12 deletions
diff --git a/core/java/android/os/ServiceManager.java b/core/java/android/os/ServiceManager.java index f853e67f87d0..f7d7b21cb598 100644 --- a/core/java/android/os/ServiceManager.java +++ b/core/java/android/os/ServiceManager.java @@ -257,7 +257,12 @@ public final class ServiceManager { * * @return {@code null} only if there are permission problems or fatal errors. */ - public static native IBinder waitForService(@NonNull String name); + public static IBinder waitForService(@NonNull String name) { + return Binder.allowBlocking(waitForServiceNative(name)); + } + + private static native IBinder waitForServiceNative(@NonNull String name); + /** * Returns the specified service from the service manager, if declared. diff --git a/core/jni/android_os_ServiceManager.cpp b/core/jni/android_os_ServiceManager.cpp index c7479492d404..d642d0ebbfc1 100644 --- a/core/jni/android_os_ServiceManager.cpp +++ b/core/jni/android_os_ServiceManager.cpp @@ -29,11 +29,8 @@ namespace android { // Native because we have a client-side wait in waitForService() and we do not // want an unnecessary second copy of it. -static jobject android_os_ServiceManager_waitForService( - JNIEnv *env, - jclass /* clazzObj */, - jstring serviceNameObj) { - +static jobject android_os_ServiceManager_waitForServiceNative(JNIEnv* env, jclass /* clazzObj */, + jstring serviceNameObj) { const jchar* serviceName = env->GetStringCritical(serviceNameObj, nullptr); if (!serviceName) { jniThrowNullPointerException(env, nullptr); @@ -55,12 +52,9 @@ static jobject android_os_ServiceManager_waitForService( // ---------------------------------------------------------------------------- static const JNINativeMethod method_table[] = { - /* name, signature, funcPtr */ - { - "waitForService", - "(Ljava/lang/String;)Landroid/os/IBinder;", - (void*)android_os_ServiceManager_waitForService - }, + /* name, signature, funcPtr */ + {"waitForServiceNative", "(Ljava/lang/String;)Landroid/os/IBinder;", + (void*)android_os_ServiceManager_waitForServiceNative}, }; int register_android_os_ServiceManager(JNIEnv* env) { |