summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Stanislav Zholnin <zholnin@google.com> 2021-05-14 21:11:50 +0100
committer Stanislav Zholnin <zholnin@google.com> 2021-05-15 11:03:29 +0100
commit20091903f60c0d3887da18c47f7e69dd2fb39d5b (patch)
tree236b67f6a766412e910b216a4bdefe3ca62b28e9
parent7f1f8d0bcd1456fd47a42d5f0afc5cea39495091 (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.java1
-rw-r--r--services/core/java/com/android/server/appop/HistoricalRegistry.java5
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);
}