diff --git a/service/src/com/android/server/ConnectivityService.java b/service/src/com/android/server/ConnectivityService.java index b0409525d8..9e2acc9742 100644 --- a/service/src/com/android/server/ConnectivityService.java +++ b/service/src/com/android/server/ConnectivityService.java @@ -4229,13 +4229,16 @@ public class ConnectivityService extends IConnectivityManager.Stub private void handleRemoveNetworkRequest(@NonNull final NetworkRequestInfo nri) { ensureRunningOnConnectivityServiceThread(); - nri.unlinkDeathRecipient(); for (final NetworkRequest req : nri.mRequests) { - mNetworkRequests.remove(req); + if (null == mNetworkRequests.remove(req)) { + logw("Attempted removal of untracked request " + req + " for nri " + nri); + continue; + } if (req.isListen()) { removeListenRequestFromNetworks(req); } } + nri.unlinkDeathRecipient(); if (mDefaultNetworkRequests.remove(nri)) { // If this request was one of the defaults, then the UID rules need to be updated // WARNING : if the app(s) for which this network request is the default are doing @@ -5913,8 +5916,8 @@ public class ConnectivityService extends IConnectivityManager.Stub @Override public void binderDied() { log("ConnectivityService NetworkRequestInfo binderDied(" + - mRequests + ", " + mBinder + ")"); - releaseNetworkRequests(mRequests); + "uid/pid:" + mUid + "/" + mPid + ", " + mBinder + ")"); + mHandler.post(() -> handleRemoveNetworkRequest(this)); } @Override @@ -6345,12 +6348,6 @@ public class ConnectivityService extends IConnectivityManager.Stub return mNextNetworkProviderId.getAndIncrement(); } - private void releaseNetworkRequests(List networkRequests) { - for (int i = 0; i < networkRequests.size(); i++) { - releaseNetworkRequest(networkRequests.get(i)); - } - } - @Override public void releaseNetworkRequest(NetworkRequest networkRequest) { ensureNetworkRequestHasType(networkRequest);