From 379d52be47be88b86f0d446c27d47e80bb81cfd1 Mon Sep 17 00:00:00 2001 From: Jeff Sharkey Date: Tue, 3 May 2016 17:40:02 -0600 Subject: [PATCH] Avoid restart when inserting/ejecting adopted. When rapidly inserting/ejecting an adopted storage device, we might still be trying to prepare the storage device. Catch the exception to avoid a runtime restart, and keep rolling forward, since we'll probably be handling the ejected event in a few moments to clean up any packages. Bug: 28467146 Change-Id: Ib923663ae6d63259c1b5792b68dfe760612ab838 --- .../com/android/server/pm/PackageManagerService.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 61e36d9641883..fe0eda1bd2bac 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -18818,9 +18818,14 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName()); continue; } - sm.prepareUserStorage(volumeUuid, user.id, user.serialNumber, flags); - synchronized (mInstallLock) { - reconcileAppsDataLI(volumeUuid, user.id, flags); + try { + sm.prepareUserStorage(volumeUuid, user.id, user.serialNumber, flags); + synchronized (mInstallLock) { + reconcileAppsDataLI(volumeUuid, user.id, flags); + } + } catch (IllegalStateException e) { + // Device was probably ejected, and we'll process that event momentarily + Slog.w(TAG, "Failed to prepare storage: " + e); } }