Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b8f20004 authored by Suprabh Shukla's avatar Suprabh Shukla
Browse files

Supplying the IBinder to binderDied

Plugging the binder instance that dies. This helps a single
DeathRecipient to listen for multiple binder deaths.

Test: atest FrameworksCoreTests:BinderDeathRecipientTest

Bug: 135633339
Change-Id: I976ee2a138877830885ee1cbbd2b313ecb87aeb3
parent 9001d13c
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -631,10 +631,12 @@ public final class BinderProxy implements IBinder {
        }
    }

    private static void sendDeathNotice(DeathRecipient recipient) {
        if (false) Log.v("JavaBinder", "sendDeathNotice to " + recipient);
    private static void sendDeathNotice(DeathRecipient recipient, IBinder binderProxy) {
        if (false) {
            Log.v("JavaBinder", "sendDeathNotice to " + recipient + " for " + binderProxy);
        }
        try {
            recipient.binderDied();
            recipient.binderDied(binderProxy);
        } catch (RuntimeException exc) {
            Log.w("BinderNative", "Uncaught exception from death notification",
                    exc);
+7 −0
Original line number Diff line number Diff line
@@ -285,6 +285,13 @@ public interface IBinder {
     */
    public interface DeathRecipient {
        public void binderDied();

        /**
         * @hide
         */
        default void binderDied(IBinder who) {
            binderDied();
        }
    }

    /**
+5 −4
Original line number Diff line number Diff line
@@ -537,9 +537,9 @@ public:
        LOGDEATH("Receiving binderDied() on JavaDeathRecipient %p\n", this);
        if (mObject != NULL) {
            JNIEnv* env = javavm_to_jnienv(mVM);

            jobject jBinderProxy = javaObjectForIBinder(env, who.promote());
            env->CallStaticVoidMethod(gBinderProxyOffsets.mClass,
                    gBinderProxyOffsets.mSendDeathNotice, mObject);
                                      gBinderProxyOffsets.mSendDeathNotice, mObject, jBinderProxy);
            if (env->ExceptionCheck()) {
                jthrowable excep = env->ExceptionOccurred();
                report_exception(env, excep,
@@ -1532,8 +1532,9 @@ static int int_register_android_os_BinderProxy(JNIEnv* env)
    gBinderProxyOffsets.mClass = MakeGlobalRefOrDie(env, clazz);
    gBinderProxyOffsets.mGetInstance = GetStaticMethodIDOrDie(env, clazz, "getInstance",
            "(JJ)Landroid/os/BinderProxy;");
    gBinderProxyOffsets.mSendDeathNotice = GetStaticMethodIDOrDie(env, clazz, "sendDeathNotice",
            "(Landroid/os/IBinder$DeathRecipient;)V");
    gBinderProxyOffsets.mSendDeathNotice =
            GetStaticMethodIDOrDie(env, clazz, "sendDeathNotice",
                                   "(Landroid/os/IBinder$DeathRecipient;Landroid/os/IBinder;)V");
    gBinderProxyOffsets.mNativeData = GetFieldIDOrDie(env, clazz, "mNativeData", "J");

    clazz = FindClassOrDie(env, "java/lang/Class");
+6 −1
Original line number Diff line number Diff line
@@ -8,6 +8,7 @@ android_test {
        "EnabledTestApp/src/**/*.java",
        "BinderProxyCountingTestApp/src/**/*.java",
        "BinderProxyCountingTestService/src/**/*.java",
        "BinderDeathRecipientHelperApp/src/**/*.java",
        "aidl/**/I*.aidl",
    ],

@@ -59,7 +60,11 @@ android_test {
    resource_dirs: ["res"],
    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
+1 −0
Original line number Diff line number Diff line
@@ -95,6 +95,7 @@

    <uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" />
    <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" />

Loading