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);
             }
         }
     }