diff options
Diffstat (limited to 'services/backup/java/com/android/server')
-rw-r--r-- | services/backup/java/com/android/server/backup/BackupManagerService.java | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/services/backup/java/com/android/server/backup/BackupManagerService.java b/services/backup/java/com/android/server/backup/BackupManagerService.java index 13db985..b3bb9e6 100644 --- a/services/backup/java/com/android/server/backup/BackupManagerService.java +++ b/services/backup/java/com/android/server/backup/BackupManagerService.java @@ -2218,10 +2218,10 @@ public class BackupManagerService { // fire off a backup agent, blocking until it attaches or times out IBackupAgent bindToAgentSynchronous(ApplicationInfo app, int mode) { IBackupAgent agent = null; - synchronized(mAgentConnectLock) { - mConnecting = true; - mConnectedAgent = null; - try { + try { + synchronized(mAgentConnectLock) { + mConnecting = true; + mConnectedAgent = null; if (mActivityManager.bindBackupAgent(app, mode)) { Slog.d(TAG, "awaiting agent for " + app); @@ -2235,7 +2235,6 @@ public class BackupManagerService { } catch (InterruptedException e) { // just bail Slog.w(TAG, "Interrupted: " + e); - mActivityManager.clearPendingBackup(); return null; } } @@ -2243,14 +2242,22 @@ public class BackupManagerService { // if we timed out with no connect, abort and move on if (mConnecting == true) { Slog.w(TAG, "Timeout waiting for agent " + app); - mActivityManager.clearPendingBackup(); return null; } if (DEBUG) Slog.i(TAG, "got agent " + mConnectedAgent); agent = mConnectedAgent; } - } catch (RemoteException e) { + } + } catch (RemoteException e) { // can't happen - ActivityManager is local + } finally { + // failed to bind backup agent, clear pending backup + if (agent == null) { + try { + mActivityManager.clearPendingBackup(); + } catch (RemoteException e) { + // can't happen - ActivityManager is local + } } } return agent; |