diff options
| author | 2021-03-24 10:47:25 +0000 | |
|---|---|---|
| committer | 2021-03-24 10:47:25 +0000 | |
| commit | c2093d9dd45bb94789f77337cf4c93a3059b85e0 (patch) | |
| tree | f8fca41f437f3e69ab619f91544bba492df5e48a | |
| parent | b99a0bc491de62de4fefdb59b7fd62bff8c97fe6 (diff) | |
| parent | 31acbce474c0b83abfeb622572da105a273a1aca (diff) | |
Merge "[NS04.7] Reinstate a necessary change" into sc-dev
| -rw-r--r-- | services/core/java/com/android/server/ConnectivityService.java | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index 4c6e06f70277..67cd6c388f4d 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -6467,6 +6467,13 @@ public class ConnectivityService extends IConnectivityManager.Stub } } + private boolean isNetworkProviderWithIdRegistered(final int providerId) { + for (final NetworkProviderInfo npi : mNetworkProviderInfos.values()) { + if (npi.providerId == providerId) return true; + } + return false; + } + /** * Register or update a network offer. * @param newOffer The new offer. If the callback member is the same as an existing @@ -6474,7 +6481,13 @@ public class ConnectivityService extends IConnectivityManager.Stub */ private void handleRegisterNetworkOffer(@NonNull final NetworkOffer newOffer) { ensureRunningOnConnectivityServiceThread(); - + if (!isNetworkProviderWithIdRegistered(newOffer.providerId)) { + // This may actually happen if a provider updates its score or registers and then + // immediately unregisters. The offer would still be in the handler queue, but the + // provider would have been removed. + if (DBG) log("Received offer from an unregistered provider"); + return; + } final NetworkOfferInfo existingOffer = findNetworkOfferInfoByCallback(newOffer.callback); if (null != existingOffer) { handleUnregisterNetworkOffer(existingOffer); |