From 3c90c5bc55daa245dbba62b718281f3067620ecd Mon Sep 17 00:00:00 2001 From: Sarp Misoglu Date: Mon, 27 Jan 2025 12:02:48 +0000 Subject: 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 --- .../backup/BackupAgentConnectionManager.java | 27 ++++++++++++++-------- 1 file changed, 17 insertions(+), 10 deletions(-) (limited to 'services/backup') 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 mRestoreNoRestrictedModePackages = new ArraySet<>(); + @GuardedBy("mAgentConnectLock") private final ArraySet mBackupNoRestrictedModePackages = new ArraySet<>(); private final IActivityManager mActivityManager; @@ -322,14 +324,16 @@ public class BackupAgentConnectionManager { */ public void setNoRestrictedModePackages(Set 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. -- cgit v1.2.3-59-g8ed1b