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

Commit b25a5323 authored by Vladimir Marko's avatar Vladimir Marko
Browse files

Rename Binder.destroy() to Binder.destroyBinder().

There are a few AIDL-generated stubs that perform "destroy"
transactions and call "this.destroy()". Previously, this
resolved to the "destroy()" method from their interface on
ART while resolving to Binder.destroy() on the RI, though
this is a subject of a bug report against the JDK,
    http://bugs.java.com/bugdatabase/view_bug.do?bug_id=8021581 .
Resolving to the private Binder.destroy, inaccessible to
the Stub, would lead to throwing IllegalAccessErrror.

As we're changing the method lookup to be closer to RI, see
    https://android-review.googlesource.com/413119 ,
we should stay clear of the problematic cases whether we
make a decision to follow the RI precisely or not. Therefore
we rename the Binder.destroy() to Binder.destroyBinder().

Test: Nexus 6P boots.
Bug: 62855082
Change-Id: I43baf76b6f3c681d93b411cecf2bc00fccafecac
parent 8a945baf
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -529,7 +529,7 @@ public class Binder implements IBinder {
    
    protected void finalize() throws Throwable {
        try {
            destroy();
            destroyBinder();
        } finally {
            super.finalize();
        }
@@ -559,7 +559,7 @@ public class Binder implements IBinder {
    }

    private native final void init();
    private native final void destroy();
    private native final void destroyBinder();

    // Entry point from android_util_Binder.cpp's onTransact
    private boolean execTransact(int code, long dataObj, long replyObj,
+3 −3
Original line number Diff line number Diff line
@@ -836,7 +836,7 @@ static void android_os_Binder_init(JNIEnv* env, jobject obj)
    env->SetLongField(obj, gBinderOffsets.mObject, (jlong)jbh);
}

static void android_os_Binder_destroy(JNIEnv* env, jobject obj)
static void android_os_Binder_destroyBinder(JNIEnv* env, jobject obj)
{
    JavaBBinderHolder* jbh = (JavaBBinderHolder*)
        env->GetLongField(obj, gBinderOffsets.mObject);
@@ -847,7 +847,7 @@ static void android_os_Binder_destroy(JNIEnv* env, jobject obj)
    } else {
        // Encountering an uninitialized binder is harmless.  All it means is that
        // the Binder was only partially initialized when its finalizer ran and called
        // destroy().  The Binder could be partially initialized for several reasons.
        // destroyBinder().  The Binder could be partially initialized for several reasons.
        // For example, a Binder subclass constructor might have thrown an exception before
        // it could delegate to its superclass's constructor.  Consequently init() would
        // not have been called and the holder pointer would remain NULL.
@@ -872,7 +872,7 @@ static const JNINativeMethod gBinderMethods[] = {
    { "getThreadStrictModePolicy", "()I", (void*)android_os_Binder_getThreadStrictModePolicy },
    { "flushPendingCommands", "()V", (void*)android_os_Binder_flushPendingCommands },
    { "init", "()V", (void*)android_os_Binder_init },
    { "destroy", "()V", (void*)android_os_Binder_destroy },
    { "destroyBinder", "()V", (void*)android_os_Binder_destroyBinder },
    { "blockUntilThreadAvailable", "()V", (void*)android_os_Binder_blockUntilThreadAvailable }
};