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

Commit 19c4883c authored by Wei Wang's avatar Wei Wang
Browse files

Add death monitor to AsyncChannel Server.

Bug:27878941
Change-Id: Ia6d12b49979b47434db7969372d6c02f799bc7d4
parent ada2c872
Loading
Loading
Loading
Loading
+17 −9
Original line number Diff line number Diff line
@@ -402,7 +402,7 @@ public class AsyncChannel {

        // Initialize destination fields
        mDstMessenger = dstMessenger;

        linkToDeathMonitor();
        if (DBG) log("connected srcHandler to the dstMessenger X");
    }

@@ -844,22 +844,30 @@ public class AsyncChannel {
        msg.arg1 = status;
        msg.obj = this;
        msg.replyTo = mDstMessenger;
        if (!linkToDeathMonitor()) {
            // Override status to indicate failure
            msg.arg1 = STATUS_BINDING_UNSUCCESSFUL;
        }

        /*
         * Link to death only when bindService isn't used.
        mSrcHandler.sendMessage(msg);
    }

    /**
     * Link to death monitor for destination messenger. Returns true if successfully binded to
     * destination messenger; false otherwise.
     */
        if (mConnection == null) {
    private boolean linkToDeathMonitor() {
        // Link to death only when bindService isn't used and not already linked.
        if (mConnection == null && mDeathMonitor == null) {
            mDeathMonitor = new DeathMonitor();
            try {
                mDstMessenger.getBinder().linkToDeath(mDeathMonitor, 0);
            } catch (RemoteException e) {
                mDeathMonitor = null;
                // Override status to indicate failure
                msg.arg1 = STATUS_BINDING_UNSUCCESSFUL;
                return false;
            }
        }

        mSrcHandler.sendMessage(msg);
        return true;
    }

    /**