Ignore class_{reset|start}_post_data on non-updatable APEX.

For devices that use FDE and don't support updatable APEXes, don't
stop and restart all processes - there is no need and it only increases
boot time for these devices.

Additionally, some daemons have never been restarted in the past, and
restarting them exposes certain issues.

Bug: 137251597
Bug: 136777273
Bug: 135627804
Test: verified manually w/ ro.updatable.apex=false
Change-Id: I9590f2c2cdfab0a49f39846896460305d44221ee
This commit is contained in:
Martijn Coenen 2019-07-16 13:15:48 +02:00
parent 8987f061c4
commit 728586f5b2

View file

@ -42,6 +42,7 @@
#include <sys/wait.h>
#include <unistd.h>
#include <ApexProperties.sysprop.h>
#include <android-base/chrono_utils.h>
#include <android-base/file.h>
#include <android-base/logging.h>
@ -130,6 +131,13 @@ static Result<void> do_class_start_post_data(const BuiltinArguments& args) {
if (args.context != kInitContext) {
return Error() << "command 'class_start_post_data' only available in init context";
}
static bool is_apex_updatable = android::sysprop::ApexProperties::updatable().value_or(false);
if (!is_apex_updatable) {
// No need to start these on devices that don't support APEX, since they're not
// stopped either.
return {};
}
for (const auto& service : ServiceList::GetInstance()) {
if (service->classnames().count(args[1])) {
if (auto result = service->StartIfPostData(); !result) {
@ -155,6 +163,11 @@ static Result<void> do_class_reset_post_data(const BuiltinArguments& args) {
if (args.context != kInitContext) {
return Error() << "command 'class_reset_post_data' only available in init context";
}
static bool is_apex_updatable = android::sysprop::ApexProperties::updatable().value_or(false);
if (!is_apex_updatable) {
// No need to stop these on devices that don't support APEX.
return {};
}
ForEachServiceInClass(args[1], &Service::ResetIfPostData);
return {};
}