Ensure obb migration finish before mounting obb for app data isolation

Bug: 160850506
Test: Add sleep and logging in migrate_legacy_obb_data.sh, to ensure when
app starts during migration still works

Change-Id: I6732abf0f08637bddf686d430489182d627ab0ea
This commit is contained in:
Ricky Wai
2020-07-15 16:52:53 +00:00
parent d8e4cdc656
commit 97618f12d7

View File

@@ -1139,13 +1139,6 @@ class StorageManagerService extends IStorageManager.Stub
}
private void completeUnlockUser(int userId) {
// If user 0 has completed unlock, perform a one-time migration of legacy obb data
// to its new location. This may take time depending on the size of the data to be copied
// so it's done on the StorageManager handler thread.
if (userId == 0) {
mPmInternal.migrateLegacyObbData();
}
onKeyguardStateChanged(false);
// Record user as started so newly mounted volumes kick off events
@@ -1538,9 +1531,21 @@ class StorageManagerService extends IStorageManager.Stub
mFuseMountedUser.remove(vol.getMountUserId());
} else if (mVoldAppDataIsolationEnabled){
final int userId = vol.getMountUserId();
mFuseMountedUser.add(userId);
// Async remount app storage so it won't block the main thread.
new Thread(() -> {
// If user 0 has completed unlock, perform a one-time migration of legacy
// obb data to its new location. This may take time depending on the size of
// the data to be copied so it's done on the StorageManager worker thread.
// This needs to be finished before start mounting obb directories.
if (userId == 0) {
mPmInternal.migrateLegacyObbData();
}
// Add fuse mounted user after migration to prevent ProcessList tries to
// create obb directory before migration is done.
mFuseMountedUser.add(userId);
Map<Integer, String> pidPkgMap = null;
// getProcessesWithPendingBindMounts() could fail when a new app process is
// starting and it's not planning to mount storage dirs in zygote, but it's