diff options
| author | 2017-09-18 13:34:39 +0100 | |
|---|---|---|
| committer | 2017-09-18 13:34:44 +0100 | |
| commit | f95cf5d9c3981c0fb1f51493574232ca356428aa (patch) | |
| tree | f2f27dae38b48393d9b8f7acf9d83f0ddc2013d0 | |
| parent | 3f09d6cf3be9ac72e560fc6d6c7d672db2e0744c (diff) | |
[RefactoredBMS] Offload the mRunningFullBackupTask.handleCancel()
call from the main thread to another thread
This CL replicates both ag/2135862 and ag/2465381 in RefactoredBMS.
Test: runtest -p com.android.server.backup frameworks-services
Bug: 37973765
Change-Id: I895cb27bc910d9970ab1c33cd54a773b8f9b6cf6
| -rw-r--r-- | services/backup/java/com/android/server/backup/RefactoredBackupManagerService.java | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/services/backup/java/com/android/server/backup/RefactoredBackupManagerService.java b/services/backup/java/com/android/server/backup/RefactoredBackupManagerService.java index d044cb55cd9f..dd99b023c6aa 100644 --- a/services/backup/java/com/android/server/backup/RefactoredBackupManagerService.java +++ b/services/backup/java/com/android/server/backup/RefactoredBackupManagerService.java @@ -2119,14 +2119,26 @@ public class RefactoredBackupManagerService implements BackupManagerServiceInter // so tear down any ongoing backup task right away. @Override public void endFullBackup() { - synchronized (mQueueLock) { - if (mRunningFullBackupTask != null) { - if (DEBUG_SCHEDULING) { - Slog.i(TAG, "Telling running backup to stop"); + // offload the mRunningFullBackupTask.handleCancel() call to another thread, + // as we might have to wait for mCancelLock + Runnable endFullBackupRunnable = new Runnable() { + @Override + public void run() { + PerformFullTransportBackupTask pftbt = null; + synchronized (mQueueLock) { + if (mRunningFullBackupTask != null) { + pftbt = mRunningFullBackupTask; + } + } + if (pftbt != null) { + if (DEBUG_SCHEDULING) { + Slog.i(TAG, "Telling running backup to stop"); + } + pftbt.handleCancel(true); } - mRunningFullBackupTask.handleCancel(true); } - } + }; + new Thread(endFullBackupRunnable, "end-full-backup").start(); } // Used by both incremental and full restore |