From 519a87db8fabb49f299aa384aeb5cfe4dfedf907 Mon Sep 17 00:00:00 2001 From: Anton Philippov Date: Mon, 27 Mar 2017 14:49:04 +0100 Subject: [PATCH] Add null check in BackupManagerService$PerformBackupTask.handleCancel() handleCancel() can be called before we start backing up any particular package, therefore we need to properly handle log messages in that case. Bug: 36638539 Test: manual Change-Id: Ic96e2fbad5c0a79640a3419d187e8b5e4d265de3 --- .../server/backup/BackupManagerService.java | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/services/backup/java/com/android/server/backup/BackupManagerService.java b/services/backup/java/com/android/server/backup/BackupManagerService.java index 30d06db933304..c71cbd3dab9fe 100644 --- a/services/backup/java/com/android/server/backup/BackupManagerService.java +++ b/services/backup/java/com/android/server/backup/BackupManagerService.java @@ -3526,21 +3526,23 @@ public class BackupManagerService { return; } mCancelAll = cancelAll; - // Whoops, the current agent timed out running doBackup(). Tidy up and restage - // it for the next time we run a backup pass. - // !!! TODO: keep track of failure counts per agent, and blacklist those which - // fail repeatedly (i.e. have proved themselves to be buggy). - Slog.e(TAG, "Cancel backing up " + mCurrentPackage.packageName); - EventLog.writeEvent(EventLogTags.BACKUP_AGENT_FAILURE, mCurrentPackage.packageName); + final String logPackageName = (mCurrentPackage != null) + ? mCurrentPackage.packageName + : "no_package_yet"; + Slog.i(TAG, "Cancel backing up " + logPackageName); + EventLog.writeEvent(EventLogTags.BACKUP_AGENT_FAILURE, logPackageName); + addBackupTrace("cancel of " + logPackageName + ", cancelAll=" + cancelAll); mMonitor = monitorEvent(mMonitor, BackupManagerMonitor.LOG_EVENT_ID_KEY_VALUE_BACKUP_CANCEL, mCurrentPackage, BackupManagerMonitor.LOG_EVENT_CATEGORY_AGENT, putMonitoringExtra(null, BackupManagerMonitor.EXTRA_LOG_CANCEL_ALL, mCancelAll)); - addBackupTrace( - "cancel of " + mCurrentPackage.packageName + ", cancelAll=" + cancelAll); errorCleanup(); if (!cancelAll) { + // The current agent either timed out or was cancelled running doBackup(). + // Restage it for the next time we run a backup pass. + // !!! TODO: keep track of failure counts per agent, and blacklist those which + // fail repeatedly (i.e. have proved themselves to be buggy). executeNextState( mQueue.isEmpty() ? BackupState.FINAL : BackupState.RUNNING_QUEUE); dataChangedImpl(mCurrentPackage.packageName);