From 050151e0529c16fc878b7273fbf2b951f8039fd7 Mon Sep 17 00:00:00 2001 From: Jeff Sharkey Date: Fri, 13 Apr 2018 14:28:30 -0600 Subject: Don't process broadcasts until really ready. Someone started setting mSystemReady too early, when we really want to know SystemServer's real ready state. Add a variable to track that, and don't process broadcasts until that's set. Bug: 78020762 Test: builds, boots Change-Id: I65213e46044c95fb0a8a4b09b9aa463bb15c1844 --- .../core/java/com/android/server/net/NetworkPolicyManagerService.java | 3 +++ services/core/java/com/android/server/net/NetworkStatsService.java | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java index a85960a186b7..6c0a7a70d563 100644 --- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java +++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java @@ -414,6 +414,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { final Object mNetworkPoliciesSecondLock = new Object(); @GuardedBy("allLocks") volatile boolean mSystemReady; + volatile boolean mSystemReallyReady; @GuardedBy("mUidRulesFirstLock") volatile boolean mRestrictBackground; @GuardedBy("mUidRulesFirstLock") volatile boolean mRestrictPower; @@ -866,6 +867,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { Thread.currentThread().interrupt(); throw new IllegalStateException("Service " + TAG + " init interrupted", e); } + mSystemReallyReady = true; } final private IUidObserver mUidObserver = new IUidObserver.Stub() { @@ -1402,6 +1404,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { // on background handler thread, and verified CONNECTIVITY_INTERNAL // permission above. + if (!mSystemReallyReady) return; synchronized (mUidRulesFirstLock) { synchronized (mNetworkPoliciesSecondLock) { ensureActiveMobilePolicyAL(); diff --git a/services/core/java/com/android/server/net/NetworkStatsService.java b/services/core/java/com/android/server/net/NetworkStatsService.java index e3ff72b9a9d7..e7f92dca6097 100644 --- a/services/core/java/com/android/server/net/NetworkStatsService.java +++ b/services/core/java/com/android/server/net/NetworkStatsService.java @@ -282,7 +282,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub { private Handler mHandler; private Handler.Callback mHandlerCallback; - private boolean mSystemReady; + private volatile boolean mSystemReady; private long mPersistThreshold = 2 * MB_IN_BYTES; private long mGlobalAlertBytes; -- cgit v1.2.3-59-g8ed1b