Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ed36545f authored by Zaijian Lin's avatar Zaijian Lin
Browse files

Check the data directory before mount tmpfs

As it's possible that dir is not created when mount tmpfs on external
private mount, add a busy waiting check in zygote to ensure data
directory is created before we do our work.

Bug:189406326
Change-Id: I5e5beca36383027580eeb9ead77f59ce4b3ee4e5
parent f637a0d6
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -201,6 +201,8 @@ static constexpr unsigned int STORAGE_DIR_CHECK_MAX_INTERVAL_US = 1000;
 */
static constexpr int STORAGE_DIR_CHECK_TIMEOUT_US = 1000 * 1000 * 60 * 5;

static void WaitUntilDirReady(const std::string& target, fail_fn_t fail_fn);

/**
 * A helper class containing accounting information for USAPs.
 */
@@ -1248,7 +1250,11 @@ static void isolateAppData(JNIEnv* env, const std::vector<std::string>& merged_d
    auto volPath = StringPrintf("%s/%s", externalPrivateMountPath, ent->d_name);
    auto cePath = StringPrintf("%s/user", volPath.c_str());
    auto dePath = StringPrintf("%s/user_de", volPath.c_str());
    // Wait until dir user is created.
    WaitUntilDirReady(cePath.c_str(), fail_fn);
    MountAppDataTmpFs(cePath.c_str(), fail_fn);
    // Wait until dir user_de is created.
    WaitUntilDirReady(dePath.c_str(), fail_fn);
    MountAppDataTmpFs(dePath.c_str(), fail_fn);
  }
  closedir(dir);