summaryrefslogtreecommitdiff
path: root/services/backup
diff options
context:
space:
mode:
author Sarp Misoglu <sarpm@google.com> 2025-01-27 12:02:48 +0000
committer Sarp Misoglu <sarpm@google.com> 2025-01-27 10:30:42 -0800
commit3c90c5bc55daa245dbba62b718281f3067620ecd (patch)
treee56d18ab75e70876f9bc4341626214f698f6472d /services/backup
parentf80569fd9528ab76d9dfb1cc81af85c275943124 (diff)
Synchronize calls to no restricted mode lists
This is to avoid concurrent modification errors. Fixes: 390483439 Test: atest CtsBackupTestCases Flag: EXEMPT bug fix Change-Id: I8d75ea1fc15705ee847e911452b6ba0029d7a000
Diffstat (limited to 'services/backup')
-rw-r--r--services/backup/java/com/android/server/backup/BackupAgentConnectionManager.java27
1 files changed, 17 insertions, 10 deletions
diff --git a/services/backup/java/com/android/server/backup/BackupAgentConnectionManager.java b/services/backup/java/com/android/server/backup/BackupAgentConnectionManager.java
index d8fbde4115d9..9a353fbc45bf 100644
--- a/services/backup/java/com/android/server/backup/BackupAgentConnectionManager.java
+++ b/services/backup/java/com/android/server/backup/BackupAgentConnectionManager.java
@@ -76,7 +76,9 @@ public class BackupAgentConnectionManager {
@Nullable
private BackupAgentConnection mCurrentConnection;
+ @GuardedBy("mAgentConnectLock")
private final ArraySet<String> mRestoreNoRestrictedModePackages = new ArraySet<>();
+ @GuardedBy("mAgentConnectLock")
private final ArraySet<String> mBackupNoRestrictedModePackages = new ArraySet<>();
private final IActivityManager mActivityManager;
@@ -322,14 +324,16 @@ public class BackupAgentConnectionManager {
*/
public void setNoRestrictedModePackages(Set<String> packageNames,
@BackupAnnotations.OperationType int opType) {
- if (opType == BackupAnnotations.OperationType.BACKUP) {
- mBackupNoRestrictedModePackages.clear();
- mBackupNoRestrictedModePackages.addAll(packageNames);
- } else if (opType == BackupAnnotations.OperationType.RESTORE) {
- mRestoreNoRestrictedModePackages.clear();
- mRestoreNoRestrictedModePackages.addAll(packageNames);
- } else {
- throw new IllegalArgumentException("opType must be BACKUP or RESTORE");
+ synchronized (mAgentConnectLock) {
+ if (opType == BackupAnnotations.OperationType.BACKUP) {
+ mBackupNoRestrictedModePackages.clear();
+ mBackupNoRestrictedModePackages.addAll(packageNames);
+ } else if (opType == BackupAnnotations.OperationType.RESTORE) {
+ mRestoreNoRestrictedModePackages.clear();
+ mRestoreNoRestrictedModePackages.addAll(packageNames);
+ } else {
+ throw new IllegalArgumentException("opType must be BACKUP or RESTORE");
+ }
}
}
@@ -338,8 +342,10 @@ public class BackupAgentConnectionManager {
* restore.
*/
public void clearNoRestrictedModePackages() {
- mBackupNoRestrictedModePackages.clear();
- mRestoreNoRestrictedModePackages.clear();
+ synchronized (mAgentConnectLock) {
+ mBackupNoRestrictedModePackages.clear();
+ mRestoreNoRestrictedModePackages.clear();
+ }
}
/**
@@ -353,6 +359,7 @@ public class BackupAgentConnectionManager {
* {@link #mRestoreNoRestrictedModePackages} so this method will immediately return without
* any IPC to the transport.
*/
+ @GuardedBy("mAgentConnectLock")
private boolean shouldUseRestrictedBackupModeForPackage(
@BackupAnnotations.OperationType int mode, String packageName) {
// Key/Value apps are never put in restricted mode.