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

Commit 5837eba8 authored by Daniel Rosenberg's avatar Daniel Rosenberg Committed by android-build-merger
Browse files

Merge "Defer marking boot successful when checkpointing"

am: 90edbb17

Change-Id: Ic211f79ddd70dd4dcf6c7de7336d5ec98f7b46d6
parents 644e290d 90edbb17
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.";