OSDN Git Service

Fix the deadlock problem
authorpengzhicai <pengzhicai@xiaomi.com>
Tue, 29 Nov 2016 11:01:44 +0000 (19:01 +0800)
committerzhicai peng <pengzhicai@xiaomi.com>
Thu, 1 Dec 2016 02:01:49 +0000 (02:01 +0000)
https://code.google.com/p/android/issues/detail?id=229020

Change-Id: Ib08f62dd916d09e666e58fb583555170d1e51da6
Signed-off-by: pengzhicai <pengzhicai@xiaomi.com>
services/backup/java/com/android/server/backup/BackupManagerService.java

index e6f99c1..6541252 100644 (file)
@@ -2383,16 +2383,15 @@ public class BackupManagerService {
                         } catch (InterruptedException e) {
                             // just bail
                             Slog.w(TAG, "Interrupted: " + e);
-                            mActivityManager.clearPendingBackup();
-                            return null;
+                            mConnecting = false;
+                            mConnectedAgent = null;
                         }
                     }
 
                     // 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;
+                        mConnectedAgent = null;
                     }
                     if (DEBUG) Slog.i(TAG, "got agent " + mConnectedAgent);
                     agent = mConnectedAgent;
@@ -2401,6 +2400,13 @@ public class BackupManagerService {
                 // can't happen - ActivityManager is local
             }
         }
+        if (agent == null) {
+            try {
+                mActivityManager.clearPendingBackup();
+            } catch (RemoteException e) {
+                // can't happen - ActivityManager is local
+            }
+        }
         return agent;
     }