diff options
| author | 2021-05-14 21:11:50 +0100 | |
|---|---|---|
| committer | 2021-05-15 11:03:29 +0100 | |
| commit | 20091903f60c0d3887da18c47f7e69dd2fb39d5b (patch) | |
| tree | 236b67f6a766412e910b216a4bdefe3ca62b28e9 | |
| parent | 7f1f8d0bcd1456fd47a42d5f0afc5cea39495091 (diff) | |
Make DiscreteRegistry react only to offsetHistory() calls made as TestApi call.
Initialize DiscreteRegistry first as it doesn't depend on HistoricalRegistry.
There was a wrong assumption that HistoricalRegistry.offsetHistory() is used only for
testing, which was not correct, thus calls to offsetHistory() made during normal
operations of HistoricalRegistry could lead to deadlocks and corruption of timestamps
in DiscreteRegistry.
Fix: 188111112
Fix: 187490443
Bug: 187907266
Test: atest DiscreteAppopsTest
Change-Id: I97aadab497ffea5dd91e6d581bdc39e0a5df3718
| -rw-r--r-- | services/core/java/com/android/server/appop/AppOpsService.java | 1 | ||||
| -rw-r--r-- | services/core/java/com/android/server/appop/HistoricalRegistry.java | 5 |
2 files changed, 5 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/appop/AppOpsService.java b/services/core/java/com/android/server/appop/AppOpsService.java index 13dc444dc44b..137bbe04476c 100644 --- a/services/core/java/com/android/server/appop/AppOpsService.java +++ b/services/core/java/com/android/server/appop/AppOpsService.java @@ -6454,6 +6454,7 @@ public class AppOpsService extends IAppOpsService.Stub { "offsetHistory"); // Must not hold the appops lock mHistoricalRegistry.offsetHistory(offsetMillis); + mHistoricalRegistry.offsetDiscreteHistory(offsetMillis); } @Override diff --git a/services/core/java/com/android/server/appop/HistoricalRegistry.java b/services/core/java/com/android/server/appop/HistoricalRegistry.java index 35e8d34ce185..0ab6c4a17032 100644 --- a/services/core/java/com/android/server/appop/HistoricalRegistry.java +++ b/services/core/java/com/android/server/appop/HistoricalRegistry.java @@ -212,6 +212,7 @@ final class HistoricalRegistry { } void systemReady(@NonNull ContentResolver resolver) { + mDiscreteRegistry.systemReady(); final Uri uri = Settings.Global.getUriFor(Settings.Global.APPOP_HISTORY_PARAMETERS); resolver.registerContentObserver(uri, false, new ContentObserver( FgThread.getHandler()) { @@ -249,7 +250,6 @@ final class HistoricalRegistry { } } } - mDiscreteRegistry.systemReady(); } private boolean isPersistenceInitializedMLocked() { @@ -594,6 +594,9 @@ final class HistoricalRegistry { mPersistence.persistHistoricalOpsDLocked(history); } } + } + + void offsetDiscreteHistory(long offsetMillis) { mDiscreteRegistry.offsetHistory(offsetMillis); } |