diff options
| author | 2017-07-07 15:30:50 +0100 | |
|---|---|---|
| committer | 2017-07-10 12:00:14 +0100 | |
| commit | 015df962d5716c00e3484a65a2b0315fc2978dad (patch) | |
| tree | 5605fa1a80cf5ffa577e598f18837cae3bfcb2c5 | |
| parent | cf694adee38d33b25ecfe0b3967de799e4a19c2b (diff) | |
Eliminate a race condition that could lead to calling PBT#finalizeBackup() twice
Calling finalizeBackup() the second time will most probably lead to underholding
the wakelock and system crash.
Bug: 63156509
Test: manual
Change-Id: Ic995ba4a65d749b80bf1f1d226d35a279a0d1b25
| -rw-r--r-- | services/backup/java/com/android/server/backup/BackupManagerService.java | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/services/backup/java/com/android/server/backup/BackupManagerService.java b/services/backup/java/com/android/server/backup/BackupManagerService.java index e3da4eb1628f..4a7eef930f65 100644 --- a/services/backup/java/com/android/server/backup/BackupManagerService.java +++ b/services/backup/java/com/android/server/backup/BackupManagerService.java @@ -2822,11 +2822,11 @@ public class BackupManagerService implements BackupManagerServiceInterface { break; case FINAL: - if (!mFinished) finalizeBackup(); - else { - Slog.e(TAG, "Duplicate finish"); + if (!mFinished) { + finalizeBackup(); + } else { + Slog.e(TAG, "Duplicate finish of K/V pass"); } - mFinished = true; break; } } @@ -3180,6 +3180,7 @@ public class BackupManagerService implements BackupManagerServiceInterface { break; } } + mFinished = true; Slog.i(BackupManagerService.TAG, "K/V backup pass finished."); // Only once we're entirely finished do we release the wakelock for k/v backup. mWakelock.release(); |