summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Michal Karpinski <mkarpinski@google.com> 2017-07-07 15:30:50 +0100
committer Michal Karpinski <mkarpinski@google.com> 2017-07-10 12:00:14 +0100
commit015df962d5716c00e3484a65a2b0315fc2978dad (patch)
tree5605fa1a80cf5ffa577e598f18837cae3bfcb2c5
parentcf694adee38d33b25ecfe0b3967de799e4a19c2b (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.java9
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();