summaryrefslogtreecommitdiffstats
path: root/cmds/bmgr/src/com/android/commands
diff options
context:
space:
mode:
authorChristopher Tate <ctate@android.com>2009-08-10 16:13:47 -0700
committerChristopher Tate <ctate@android.com>2009-08-11 17:25:12 -0700
commit0e0b4ae5bc5c652c8339d71ed9667e1e37baaa03 (patch)
tree42fa43521b6d394421d9f93f8191da457876ec63 /cmds/bmgr/src/com/android/commands
parenta1cbccd7b31f3c33ea46b7fe2a287168eb672056 (diff)
downloadframeworks_base-0e0b4ae5bc5c652c8339d71ed9667e1e37baaa03.zip
frameworks_base-0e0b4ae5bc5c652c8339d71ed9667e1e37baaa03.tar.gz
frameworks_base-0e0b4ae5bc5c652c8339d71ed9667e1e37baaa03.tar.bz2
Don't let bmgr leave a restore session hanging on error
Specifically, don't wait for the RestoreObserver to be informed that the restore has completed unless performRestore() ran. We were winding up in a case where bmgr was hanging forever waiting on a nonexistent restore process instead of calling endRestoreSession(). Also improve the documentation, explicitly calling out the need to call endRestoreSession() even if previous operations on the session were unsuccessful.
Diffstat (limited to 'cmds/bmgr/src/com/android/commands')
-rw-r--r--cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java18
1 files changed, 10 insertions, 8 deletions
diff --git a/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java b/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java
index 6b6d3c9..8c15d0b 100644
--- a/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java
+++ b/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java
@@ -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) {
+ }
}
}
}