Clean up when an attempted restore throws
When a restore agent throws an exception back into the framework, assume that it
may have left the app's data in an inconsistent state and clear the data for
that app (again -- it was cleared just prior to the attempted restore, too).
diff --git a/services/java/com/android/server/BackupManagerService.java b/services/java/com/android/server/BackupManagerService.java
index c493a12..fc1ec03 100644
--- a/services/java/com/android/server/BackupManagerService.java
+++ b/services/java/com/android/server/BackupManagerService.java
@@ -1276,7 +1276,11 @@
File savedStateName = new File(mStateDir, packageName);
newStateName.renameTo(savedStateName);
} catch (Exception e) {
+ // If the agent fails restore, it might have put the app's data
+ // into an incoherent state. For consistency we wipe its data
+ // again in this case before propagating the exception
Log.e(TAG, "Error restoring data for " + packageName, e);
+ clearApplicationDataSynchronous(packageName);
}
}
}