Loading core/java/android/os/BinderProxy.java +5 −3 Original line number Original line Diff line number Diff line Loading @@ -631,10 +631,12 @@ public final class BinderProxy implements IBinder { } } } } private static void sendDeathNotice(DeathRecipient recipient) { private static void sendDeathNotice(DeathRecipient recipient, IBinder binderProxy) { if (false) Log.v("JavaBinder", "sendDeathNotice to " + recipient); if (false) { Log.v("JavaBinder", "sendDeathNotice to " + recipient + " for " + binderProxy); } try { try { recipient.binderDied(); recipient.binderDied(binderProxy); } catch (RuntimeException exc) { } catch (RuntimeException exc) { Log.w("BinderNative", "Uncaught exception from death notification", Log.w("BinderNative", "Uncaught exception from death notification", exc); exc); Loading core/java/android/os/IBinder.java +7 −0 Original line number Original line Diff line number Diff line Loading @@ -285,6 +285,13 @@ public interface IBinder { */ */ public interface DeathRecipient { public interface DeathRecipient { public void binderDied(); public void binderDied(); /** * @hide */ default void binderDied(IBinder who) { binderDied(); } } } /** /** Loading core/jni/android_util_Binder.cpp +5 −4 Original line number Original line Diff line number Diff line Loading @@ -537,9 +537,9 @@ public: LOGDEATH("Receiving binderDied() on JavaDeathRecipient %p\n", this); LOGDEATH("Receiving binderDied() on JavaDeathRecipient %p\n", this); if (mObject != NULL) { if (mObject != NULL) { JNIEnv* env = javavm_to_jnienv(mVM); JNIEnv* env = javavm_to_jnienv(mVM); jobject jBinderProxy = javaObjectForIBinder(env, who.promote()); env->CallStaticVoidMethod(gBinderProxyOffsets.mClass, env->CallStaticVoidMethod(gBinderProxyOffsets.mClass, gBinderProxyOffsets.mSendDeathNotice, mObject); gBinderProxyOffsets.mSendDeathNotice, mObject, jBinderProxy); if (env->ExceptionCheck()) { if (env->ExceptionCheck()) { jthrowable excep = env->ExceptionOccurred(); jthrowable excep = env->ExceptionOccurred(); report_exception(env, excep, report_exception(env, excep, Loading Loading @@ -1532,8 +1532,9 @@ static int int_register_android_os_BinderProxy(JNIEnv* env) gBinderProxyOffsets.mClass = MakeGlobalRefOrDie(env, clazz); gBinderProxyOffsets.mClass = MakeGlobalRefOrDie(env, clazz); gBinderProxyOffsets.mGetInstance = GetStaticMethodIDOrDie(env, clazz, "getInstance", gBinderProxyOffsets.mGetInstance = GetStaticMethodIDOrDie(env, clazz, "getInstance", "(JJ)Landroid/os/BinderProxy;"); "(JJ)Landroid/os/BinderProxy;"); gBinderProxyOffsets.mSendDeathNotice = GetStaticMethodIDOrDie(env, clazz, "sendDeathNotice", gBinderProxyOffsets.mSendDeathNotice = "(Landroid/os/IBinder$DeathRecipient;)V"); GetStaticMethodIDOrDie(env, clazz, "sendDeathNotice", "(Landroid/os/IBinder$DeathRecipient;Landroid/os/IBinder;)V"); gBinderProxyOffsets.mNativeData = GetFieldIDOrDie(env, clazz, "mNativeData", "J"); gBinderProxyOffsets.mNativeData = GetFieldIDOrDie(env, clazz, "mNativeData", "J"); clazz = FindClassOrDie(env, "java/lang/Class"); clazz = FindClassOrDie(env, "java/lang/Class"); Loading core/tests/coretests/Android.bp +6 −1 Original line number Original line Diff line number Diff line Loading @@ -8,6 +8,7 @@ android_test { "EnabledTestApp/src/**/*.java", "EnabledTestApp/src/**/*.java", "BinderProxyCountingTestApp/src/**/*.java", "BinderProxyCountingTestApp/src/**/*.java", "BinderProxyCountingTestService/src/**/*.java", "BinderProxyCountingTestService/src/**/*.java", "BinderDeathRecipientHelperApp/src/**/*.java", "aidl/**/I*.aidl", "aidl/**/I*.aidl", ], ], Loading Loading @@ -59,7 +60,11 @@ android_test { resource_dirs: ["res"], resource_dirs: ["res"], resource_zips: [":FrameworksCoreTests_apks_as_resources"], resource_zips: [":FrameworksCoreTests_apks_as_resources"], data: [":BstatsTestApp"], data: [ ":BstatsTestApp", ":BinderDeathRecipientHelperApp1", ":BinderDeathRecipientHelperApp2", ], } } // Rules to copy all the test apks to the intermediate raw resource directory // Rules to copy all the test apks to the intermediate raw resource directory Loading core/tests/coretests/AndroidManifest.xml +1 −0 Original line number Original line Diff line number Diff line Loading @@ -95,6 +95,7 @@ <uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" /> <uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" /> <uses-permission android:name="android.permission.KILL_UID" /> <uses-permission android:name="android.permission.KILL_UID" /> <uses-permission android:name="android.permission.FORCE_STOP_PACKAGES" /> <uses-permission android:name="android.permission.ACCESS_SURFACE_FLINGER" /> <uses-permission android:name="android.permission.ACCESS_SURFACE_FLINGER" /> Loading Loading
core/java/android/os/BinderProxy.java +5 −3 Original line number Original line Diff line number Diff line Loading @@ -631,10 +631,12 @@ public final class BinderProxy implements IBinder { } } } } private static void sendDeathNotice(DeathRecipient recipient) { private static void sendDeathNotice(DeathRecipient recipient, IBinder binderProxy) { if (false) Log.v("JavaBinder", "sendDeathNotice to " + recipient); if (false) { Log.v("JavaBinder", "sendDeathNotice to " + recipient + " for " + binderProxy); } try { try { recipient.binderDied(); recipient.binderDied(binderProxy); } catch (RuntimeException exc) { } catch (RuntimeException exc) { Log.w("BinderNative", "Uncaught exception from death notification", Log.w("BinderNative", "Uncaught exception from death notification", exc); exc); Loading
core/java/android/os/IBinder.java +7 −0 Original line number Original line Diff line number Diff line Loading @@ -285,6 +285,13 @@ public interface IBinder { */ */ public interface DeathRecipient { public interface DeathRecipient { public void binderDied(); public void binderDied(); /** * @hide */ default void binderDied(IBinder who) { binderDied(); } } } /** /** Loading
core/jni/android_util_Binder.cpp +5 −4 Original line number Original line Diff line number Diff line Loading @@ -537,9 +537,9 @@ public: LOGDEATH("Receiving binderDied() on JavaDeathRecipient %p\n", this); LOGDEATH("Receiving binderDied() on JavaDeathRecipient %p\n", this); if (mObject != NULL) { if (mObject != NULL) { JNIEnv* env = javavm_to_jnienv(mVM); JNIEnv* env = javavm_to_jnienv(mVM); jobject jBinderProxy = javaObjectForIBinder(env, who.promote()); env->CallStaticVoidMethod(gBinderProxyOffsets.mClass, env->CallStaticVoidMethod(gBinderProxyOffsets.mClass, gBinderProxyOffsets.mSendDeathNotice, mObject); gBinderProxyOffsets.mSendDeathNotice, mObject, jBinderProxy); if (env->ExceptionCheck()) { if (env->ExceptionCheck()) { jthrowable excep = env->ExceptionOccurred(); jthrowable excep = env->ExceptionOccurred(); report_exception(env, excep, report_exception(env, excep, Loading Loading @@ -1532,8 +1532,9 @@ static int int_register_android_os_BinderProxy(JNIEnv* env) gBinderProxyOffsets.mClass = MakeGlobalRefOrDie(env, clazz); gBinderProxyOffsets.mClass = MakeGlobalRefOrDie(env, clazz); gBinderProxyOffsets.mGetInstance = GetStaticMethodIDOrDie(env, clazz, "getInstance", gBinderProxyOffsets.mGetInstance = GetStaticMethodIDOrDie(env, clazz, "getInstance", "(JJ)Landroid/os/BinderProxy;"); "(JJ)Landroid/os/BinderProxy;"); gBinderProxyOffsets.mSendDeathNotice = GetStaticMethodIDOrDie(env, clazz, "sendDeathNotice", gBinderProxyOffsets.mSendDeathNotice = "(Landroid/os/IBinder$DeathRecipient;)V"); GetStaticMethodIDOrDie(env, clazz, "sendDeathNotice", "(Landroid/os/IBinder$DeathRecipient;Landroid/os/IBinder;)V"); gBinderProxyOffsets.mNativeData = GetFieldIDOrDie(env, clazz, "mNativeData", "J"); gBinderProxyOffsets.mNativeData = GetFieldIDOrDie(env, clazz, "mNativeData", "J"); clazz = FindClassOrDie(env, "java/lang/Class"); clazz = FindClassOrDie(env, "java/lang/Class"); Loading
core/tests/coretests/Android.bp +6 −1 Original line number Original line Diff line number Diff line Loading @@ -8,6 +8,7 @@ android_test { "EnabledTestApp/src/**/*.java", "EnabledTestApp/src/**/*.java", "BinderProxyCountingTestApp/src/**/*.java", "BinderProxyCountingTestApp/src/**/*.java", "BinderProxyCountingTestService/src/**/*.java", "BinderProxyCountingTestService/src/**/*.java", "BinderDeathRecipientHelperApp/src/**/*.java", "aidl/**/I*.aidl", "aidl/**/I*.aidl", ], ], Loading Loading @@ -59,7 +60,11 @@ android_test { resource_dirs: ["res"], resource_dirs: ["res"], resource_zips: [":FrameworksCoreTests_apks_as_resources"], resource_zips: [":FrameworksCoreTests_apks_as_resources"], data: [":BstatsTestApp"], data: [ ":BstatsTestApp", ":BinderDeathRecipientHelperApp1", ":BinderDeathRecipientHelperApp2", ], } } // Rules to copy all the test apks to the intermediate raw resource directory // Rules to copy all the test apks to the intermediate raw resource directory Loading
core/tests/coretests/AndroidManifest.xml +1 −0 Original line number Original line Diff line number Diff line Loading @@ -95,6 +95,7 @@ <uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" /> <uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" /> <uses-permission android:name="android.permission.KILL_UID" /> <uses-permission android:name="android.permission.KILL_UID" /> <uses-permission android:name="android.permission.FORCE_STOP_PACKAGES" /> <uses-permission android:name="android.permission.ACCESS_SURFACE_FLINGER" /> <uses-permission android:name="android.permission.ACCESS_SURFACE_FLINGER" /> Loading