From 09d32855038caf024cb77728bf141f87a6688917 Mon Sep 17 00:00:00 2001 From: Svetoslav Ganov Date: Tue, 27 Sep 2016 18:12:22 -0700 Subject: [PATCH] Don't touch usage stats before system ready When a content provider is accessed we update its foreground state and usage stats if the calling app is in the foreground. However we install system providers before the PHASE_SYSTEM_SERVICES_READY phase which means we cannot touch the the usage stats service as it calls into the content service triggering the sync manager creation before system ready violating the contract of the latter causing cascading issues. bug:31562236 Change-Id: Ied446cf3de8949e0850bab8f2b92155eac793591 --- .../core/java/com/android/server/am/ActivityManagerService.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index b623bc790139..85d2981aaa96 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -20669,8 +20669,11 @@ public final class ActivityManagerService extends ActivityManagerNative final long now = SystemClock.elapsedRealtime(); Long lastReported = userState.mProviderLastReportedFg.get(authority); if (lastReported == null || lastReported < now - 60 * 1000L) { - mUsageStatsService.reportContentProviderUsage( - authority, providerPkgName, app.userId); + if (mSystemReady) { + // Cannot touch the user stats if not system ready + mUsageStatsService.reportContentProviderUsage( + authority, providerPkgName, app.userId); + } userState.mProviderLastReportedFg.put(authority, now); } } -- 2.11.0