summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Eric Biggers <ebiggers@google.com> 2022-10-31 23:19:02 +0000
committer Eric Biggers <ebiggers@google.com> 2022-11-01 22:40:56 +0000
commit415ed9afd69787a41cbe51c8827034eb21fdd88a (patch)
tree357a30918e1ea0413834bd8ae708694407f6f815
parent2681cb2d92266a1ce16c87f78d7ce24df0e496da (diff)
Catch exceptions from prepareUserStorage() in loadPrivatePackagesInner()
There is a race condition where loadPrivatePackagesInner() can run after the volume has already been unmounted, and even reformatted as a public volume. This race can be triggered by AdoptableHostTest in CTS. Until the volume state change handling logic is fixed, it is necessary to ignore the RuntimeException that sm.prepareUserStorage() can throw after commit 9d2bb776ed13 (https://r.android.com/1959519). Bug: 253711749 Bug: 253868095 Change-Id: I9985eb5e410a5a5ff41935c806370826c6e4117d
-rw-r--r--services/core/java/com/android/server/pm/StorageEventHelper.java7
1 files changed, 5 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/pm/StorageEventHelper.java b/services/core/java/com/android/server/pm/StorageEventHelper.java
index 666776b4161e..ad87b03e9ed3 100644
--- a/services/core/java/com/android/server/pm/StorageEventHelper.java
+++ b/services/core/java/com/android/server/pm/StorageEventHelper.java
@@ -197,8 +197,11 @@ public final class StorageEventHelper extends StorageEventListener {
appDataHelper.reconcileAppsDataLI(volumeUuid, user.id, flags,
true /* migrateAppData */);
}
- } catch (IllegalStateException e) {
- // Device was probably ejected, and we'll process that event momentarily
+ } catch (RuntimeException e) {
+ // The volume was probably already unmounted. We'll probably process the unmount
+ // event momentarily. TODO(b/256909937): ignoring errors from prepareUserStorage()
+ // is very dangerous. Instead, we should fix the race condition that allows this
+ // code to run on an unmounted volume in the first place.
Slog.w(TAG, "Failed to prepare storage: " + e);
}
}