Include user identifier in external storage paths.
When building external storage paths, always include user in path to enable cross-user paths and aid debugging. Each Zygote process continues to only have access to the appropriate user-specific emulated storage through bind mounts. A second set of mounts continue supporting legacy /sdcard-style paths. For example, a process running as owner has these mount points: /storage/emulated_legacy /storage/emulated_legacy/Android/obb /storage/emulated/0 /storage/emulated/obb Since Environment is created before Zygote forks, we need to update its internal paths after each process launches. Bug: 7131382 Change-Id: I6f8c6971f2a8edfb415c14cb4ed05ff97e587a21
This commit is contained in:
@ -125,6 +125,7 @@ class ServerThread extends Thread {
|
||||
BatteryService battery = null;
|
||||
VibratorService vibrator = null;
|
||||
AlarmManagerService alarm = null;
|
||||
MountService mountService = null;
|
||||
NetworkManagementService networkManagement = null;
|
||||
NetworkStatsService networkStats = null;
|
||||
NetworkPolicyManagerService networkPolicy = null;
|
||||
@ -374,7 +375,6 @@ class ServerThread extends Thread {
|
||||
}
|
||||
|
||||
if (factoryTest != SystemServer.FACTORY_TEST_LOW_LEVEL) {
|
||||
MountService mountService = null;
|
||||
if (!"0".equals(SystemProperties.get("system_init.startmountservice"))) {
|
||||
try {
|
||||
/*
|
||||
@ -813,6 +813,7 @@ class ServerThread extends Thread {
|
||||
|
||||
// These are needed to propagate to the runnable below.
|
||||
final Context contextF = context;
|
||||
final MountService mountServiceF = mountService;
|
||||
final BatteryService batteryF = battery;
|
||||
final NetworkManagementService networkManagementF = networkManagement;
|
||||
final NetworkStatsService networkStatsF = networkStats;
|
||||
@ -846,6 +847,11 @@ class ServerThread extends Thread {
|
||||
Slog.i(TAG, "Making services ready");
|
||||
|
||||
if (!headless) startSystemUi(contextF);
|
||||
try {
|
||||
if (mountServiceF != null) mountServiceF.systemReady();
|
||||
} catch (Throwable e) {
|
||||
reportWtf("making Mount Service ready", e);
|
||||
}
|
||||
try {
|
||||
if (batteryF != null) batteryF.systemReady();
|
||||
} catch (Throwable e) {
|
||||
|
Reference in New Issue
Block a user