Merge change 20858

* changes:
  Don't let bmgr leave a restore session hanging on error
This commit is contained in:
Android (Google) Code Review
2009-08-11 17:28:49 -07:00
3 changed files with 17 additions and 8 deletions

View File

@@ -315,8 +315,7 @@ public final class Bmgr {
for (RestoreSet s : sets) {
if (s.token == token) {
System.out.println("Scheduling restore: " + s.name);
mRestore.performRestore(token, observer);
didRestore = true;
didRestore = (mRestore.performRestore(token, observer) == 0);
break;
}
}
@@ -330,12 +329,15 @@ public final class Bmgr {
}
}
// now wait for it to be done
synchronized (observer) {
while (!observer.done) {
try {
observer.wait();
} catch (InterruptedException ex) {
// if we kicked off a restore successfully, we have to wait for it
// to complete before we can shut down the restore session safely
if (didRestore) {
synchronized (observer) {
while (!observer.done) {
try {
observer.wait();
} catch (InterruptedException ex) {
}
}
}
}

View File

@@ -40,6 +40,8 @@ interface IRestoreSession {
* Restore the given set onto the device, replacing the current data of any app
* contained in the restore set with the data previously backed up.
*
* @return Zero on success; nonzero on error. The observer will only receive
* progress callbacks if this method returned zero.
* @param token The token from {@link getAvailableRestoreSets()} corresponding to
* the restore set that should be used.
* @param observer If non-null, this binder points to an object that will receive
@@ -50,6 +52,9 @@ interface IRestoreSession {
/**
* End this restore session. After this method is called, the IRestoreSession binder
* is no longer valid.
*
* <p><b>Note:</b> The caller <i>must</i> invoke this method to end the restore session,
* even if {@link getAvailableRestoreSets} or {@link performRestore} failed.
*/
void endRestoreSession();
}

View File

@@ -1725,6 +1725,8 @@ class BackupManagerService extends IBackupManager.Stub {
return 0;
}
}
Log.w(TAG, "Restore token " + Long.toHexString(token) + " not found");
return -1;
}