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

Commit 08855004 authored by James Mattis's avatar James Mattis
Browse files

Calling linkToDeath on binder in NRI constructor

Any NRI constructor that can possibly have a binder should call
linkToDeath on that binder if present. Not doing so can result in a
no such element exception when that NRI is removed.

Bug: 184155022
Test: atest FrameworksNetTests
atest FrameworksNetIntegrationTests
atest CtsNetTestCasesLatestSdk

Change-Id: I90d594e43474483c554d0d315ff7abb6f678e093
parent 9a7ad7fa
Loading
Loading
Loading
Loading
+13 −7
Original line number Diff line number Diff line
@@ -5542,12 +5542,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
            incrementRequestCountOrThrow(this);
            mCallbackFlags = callbackFlags;
            mCallingAttributionTag = callingAttributionTag;

            try {
                mBinder.linkToDeath(this, 0);
            } catch (RemoteException e) {
                binderDied();
            }
            linkDeathRecipient();
        }

        NetworkRequestInfo(@NonNull final NetworkRequestInfo nri,
@@ -5585,6 +5580,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
            incrementRequestCountOrThrow(this);
            mCallbackFlags = nri.mCallbackFlags;
            mCallingAttributionTag = nri.mCallingAttributionTag;
            linkDeathRecipient();
        }

        NetworkRequestInfo(int asUid, @NonNull final NetworkRequest r) {
@@ -5613,8 +5609,18 @@ public class ConnectivityService extends IConnectivityManager.Stub
            return Collections.unmodifiableList(tempRequests);
        }

        void linkDeathRecipient() {
            if (null != mBinder) {
                try {
                    mBinder.linkToDeath(this, 0);
                } catch (RemoteException e) {
                    binderDied();
                }
            }
        }

        void unlinkDeathRecipient() {
            if (mBinder != null) {
            if (null != mBinder) {
                mBinder.unlinkToDeath(this, 0);
            }
        }