Update LegacyTypeTracker state before sending connect broadcasts.

Currently, LegacyTypeTracker sends out connected broadcasts
before updating its internal lists of networks. This creates a
race condition where an app can query LegacyTypeTracker state
(e.g., via getActiveNetworkInfo) as soon as it gets the
broadcast, and get information that has not been updated.

Bug: 17540101
Change-Id: Iefd6d5e9fd0b427c5872166208831f70fcef8b6f
This commit is contained in:
Lorenzo Colitti
2014-09-28 16:08:06 +09:00
parent aa584b9631
commit 4b584064d2

View File

@@ -516,11 +516,13 @@ public class ConnectivityService extends IConnectivityManager.Stub {
return; return;
} }
if (list.isEmpty() || isDefaultNetwork(nai)) { list.add(nai);
// Send a broadcast if this is the first network of its type or if it's the default.
if (list.size() == 1 || isDefaultNetwork(nai)) {
maybeLogBroadcast(nai, true, type); maybeLogBroadcast(nai, true, type);
sendLegacyNetworkBroadcast(nai, true, type); sendLegacyNetworkBroadcast(nai, true, type);
} }
list.add(nai);
} }
/** Removes the given network from the specified legacy type list. */ /** Removes the given network from the specified legacy type list. */