Update logic for detecting pre-apexd services to check that the ART APEX is mounted.

am: cacf04351f

Change-Id: Ibe7463cf6445bf3fc37a1ae68cb38d4f1e3f1b60
This commit is contained in:
Martin Stjernholm 2019-09-02 03:45:53 -07:00 committed by android-build-merger
commit 4c063099a2

View file

@ -116,9 +116,10 @@ static bool ExpandArgsAndExecv(const std::vector<std::string>& args, bool sigsto
return execv(c_strings[0], c_strings.data()) == 0;
}
static bool IsRuntimeApexReady() {
static bool AreRuntimeApexesReady() {
struct stat buf;
return stat("/apex/com.android.runtime/", &buf) == 0;
return stat("/apex/com.android.art/", &buf) == 0 &&
stat("/apex/com.android.runtime/", &buf) == 0;
}
unsigned long Service::next_start_order_ = 1;
@ -406,11 +407,11 @@ Result<void> Service::Start() {
scon = *result;
}
if (!IsRuntimeApexReady() && !pre_apexd_) {
// If this service is started before the runtime APEX gets available,
// mark it as pre-apexd one. Note that this marking is permanent. So
// for example, if the service is re-launched (e.g., due to crash),
// it is still recognized as pre-apexd... for consistency.
if (!AreRuntimeApexesReady() && !pre_apexd_) {
// If this service is started before the Runtime and ART APEXes get
// available, mark it as pre-apexd one. Note that this marking is
// permanent. So for example, if the service is re-launched (e.g., due
// to crash), it is still recognized as pre-apexd... for consistency.
pre_apexd_ = true;
}