OSDN Git Service

Gracefully handle races with package uninstall
authorChristopher Tate <ctate@google.com>
Tue, 26 May 2015 20:55:52 +0000 (13:55 -0700)
committerChristopher Tate <ctate@google.com>
Tue, 26 May 2015 21:09:38 +0000 (14:09 -0700)
Bug 21417673

Change-Id: I46f9bf86454d356742f7bd5226a685257a40ced7

services/core/java/com/android/server/am/ActivityManagerService.java

index b111b36..9a2b9ae 100644 (file)
@@ -5501,8 +5501,10 @@ public final class ActivityManagerService extends ActivityManagerNative
                     // Entire package setting changed
                     enabled = pm.getApplicationEnabledSetting(packageName,
                             (userId != UserHandle.USER_ALL) ? userId : UserHandle.USER_OWNER);
-                } catch (RemoteException e) {
-                    // Can't happen...
+                } catch (Exception e) {
+                    // No such package/component; probably racing with uninstall.  In any
+                    // event it means we have nothing further to do here.
+                    return;
                 }
                 packageDisabled = enabled != PackageManager.COMPONENT_ENABLED_STATE_ENABLED
                         && enabled != PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
@@ -5517,8 +5519,9 @@ public final class ActivityManagerService extends ActivityManagerNative
                     enabled = pm.getComponentEnabledSetting(
                             new ComponentName(packageName, changedClass),
                             (userId != UserHandle.USER_ALL) ? userId : UserHandle.USER_OWNER);
-                } catch (RemoteException e) {
-                    // Can't happen...
+                } catch (Exception e) {
+                    // As above, probably racing with uninstall.
+                    return;
                 }
                 if (enabled != PackageManager.COMPONENT_ENABLED_STATE_ENABLED
                         && enabled != PackageManager.COMPONENT_ENABLED_STATE_DEFAULT) {