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

Commit 10703566 authored by Brad Ebinger's avatar Brad Ebinger
Browse files

Set Binder to null if linkToDeath throws RemoteException

If linkToDeath throws a RemoteException, set the Binder to null in
order to stop unlinkToDeath from causing the phone process to crash.

For further safety, catch NoSuchElementException directly if it
still happens, as it should just result in a no-op.

Bug: 175737956
Test: manual; atest ImsCommonTests
Change-Id: I743d1768720cee6ef264ef3168183563652e50c4
parent 2aafe6d0
Loading
Loading
Loading
Loading
+10 −3
Original line number Diff line number Diff line
@@ -32,6 +32,8 @@ import android.util.Log;

import com.android.internal.annotations.VisibleForTesting;

import java.util.NoSuchElementException;

/**
 * Base class of MmTelFeatureConnection and RcsFeatureConnection.
 */
@@ -79,7 +81,8 @@ public abstract class FeatureConnection {
                    mBinder.linkToDeath(mDeathRecipient, 0);
                }
            } catch (RemoteException e) {
                // No need to do anything if the binder is already dead.
                Log.w(TAG, "setBinder: linkToDeath on already dead Binder, setting null");
                mBinder = null;
            }
        }
    }
@@ -103,9 +106,13 @@ public abstract class FeatureConnection {
        synchronized (mLock) {
            if (mIsAvailable) {
                mIsAvailable = false;
                try {
                    if (mBinder != null) {
                        mBinder.unlinkToDeath(mDeathRecipient, 0);
                    }
                } catch (NoSuchElementException e) {
                    Log.w(TAG, "onRemovedOrDied: unlinkToDeath called on unlinked Binder.");
                }
            }
        }
    }