Update logic for detecting pre-apexd services to check that the ART APEX is mounted.
am: cacf04351f
Change-Id: Ibe7463cf6445bf3fc37a1ae68cb38d4f1e3f1b60
diff --git a/init/service.cpp b/init/service.cpp
index 9537843..7a20966 100644
--- a/init/service.cpp
+++ b/init/service.cpp
@@ -116,9 +116,10 @@
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 @@
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;
}