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
This commit is contained in:
James Mattis
2021-03-31 13:57:52 -07:00
parent 9bdfa2c582
commit fdd2d3be95

View File

@@ -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);
}
}