From 3ec7e6d9fb2b169cdfc2a4381cec5daba33b8b8c Mon Sep 17 00:00:00 2001 From: Tyler Wear Date: Tue, 17 Aug 2021 18:25:50 -0700 Subject: [PATCH] Fix NetworkOffer Death link does not exist unregisterNetworkProvider is being called from binderDied() and handleUnregisterNetworkProvider() at the same time. This results in NoSuchElementException being thrown. Check than noi can be removed from network offers before unregistering death link. Bug: 196423150 Change-Id: If5bd5f2894fa0509a89340efdc85180c54e72e0e --- service/src/com/android/server/ConnectivityService.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/service/src/com/android/server/ConnectivityService.java b/service/src/com/android/server/ConnectivityService.java index c69af0601e..0e05ef2914 100644 --- a/service/src/com/android/server/ConnectivityService.java +++ b/service/src/com/android/server/ConnectivityService.java @@ -6901,7 +6901,11 @@ public class ConnectivityService extends IConnectivityManager.Stub if (DBG) { log("unregister offer from providerId " + noi.offer.providerId + " : " + noi.offer); } - mNetworkOffers.remove(noi); + + // If the provider removes the offer and dies immediately afterwards this + // function may be called twice in a row, but the array will no longer contain + // the offer. + if (!mNetworkOffers.remove(noi)) return; noi.offer.callback.asBinder().unlinkToDeath(noi, 0 /* flags */); }