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

Commit 90edbb17 authored by Daniel Rosenberg's avatar Daniel Rosenberg Committed by Gerrit Code Review
Browse files

Merge "Defer marking boot successful when checkpointing"

parents e13b39bb 15f22bdd
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -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",
    ],

+26 −6
Original line number Diff line number Diff line
@@ -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.";