diff options
author | 2025-01-27 12:02:48 +0000 | |
---|---|---|
committer | 2025-01-27 10:30:42 -0800 | |
commit | 3c90c5bc55daa245dbba62b718281f3067620ecd (patch) | |
tree | e56d18ab75e70876f9bc4341626214f698f6472d /services/backup | |
parent | f80569fd9528ab76d9dfb1cc81af85c275943124 (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.java | 27 |
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. |