Merge "Defer marking boot successful when checkpointing"

This commit is contained in:
Daniel Rosenberg 2019-02-08 01:40:54 +00:00 committed by Gerrit Code Review
commit 90edbb17f8
2 changed files with 31 additions and 6 deletions

View file

@ -42,12 +42,15 @@ cc_library_static {
static_libs: [
"libotautil",
"libvold_binder",
],
shared_libs: [
"android.hardware.boot@1.0",
"libbase",
"libcutils",
"libbinder",
"libutils",
],
proto: {
@ -70,6 +73,7 @@ cc_binary {
static_libs: [
"libupdate_verifier",
"libotautil",
"libvold_binder",
],
shared_libs: [
@ -80,6 +84,7 @@ cc_binary {
"libhidlbase",
"liblog",
"libprotobuf-cpp-lite",
"libbinder",
"libutils",
],

View file

@ -38,6 +38,7 @@
*/
#include "update_verifier/update_verifier.h"
#include <android/os/IVold.h>
#include <dirent.h>
#include <errno.h>
@ -56,6 +57,8 @@
#include <android-base/strings.h>
#include <android-base/unique_fd.h>
#include <android/hardware/boot/1.0/IBootControl.h>
#include <binder/BinderService.h>
#include <binder/Status.h>
#include <cutils/android_reboot.h>
#include "care_map.pb.h"
@ -376,6 +379,20 @@ int update_verifier(int argc, char** argv) {
}
}
bool supports_checkpoint = false;
auto sm = android::defaultServiceManager();
android::sp<android::IBinder> binder = sm->getService(android::String16("vold"));
if (binder) {
auto vold = android::interface_cast<android::os::IVold>(binder);
android::binder::Status status = vold->supportsCheckpoint(&supports_checkpoint);
if (!status.isOk()) {
LOG(ERROR) << "Failed to check if checkpoints supported. Continuing";
}
} else {
LOG(ERROR) << "Failed to obtain vold Binder. Continuing";
}
if (!supports_checkpoint) {
CommandResult cr;
module->markBootSuccessful([&cr](CommandResult result) { cr = result; });
if (!cr.success) {
@ -383,6 +400,9 @@ int update_verifier(int argc, char** argv) {
return reboot_device();
}
LOG(INFO) << "Marked slot " << current_slot << " as booted successfully.";
} else {
LOG(INFO) << "Deferred marking slot " << current_slot << " as booted successfully.";
}
}
LOG(INFO) << "Leaving update_verifier.";