From aef46f3edd85bc55d0f2a92dbad49d03f5c12568 Mon Sep 17 00:00:00 2001 From: "guangkui.ren" Date: Sun, 7 Apr 2024 15:10:45 +0800 Subject: [PATCH] Pause recovery when it ends with Shutdown In the current design, when recovery ends with Shutdown, it will continue to execute commands repeatedly in the loop body, after it sets a "Shutdown" property. That may lead to some competition between the shutdown process and recovery command work, and then cause some problems. So, pause recovery when it ends with Shutdown, like it ending with Reboot. Change-Id: I57dfef70e7b8d600af3a3f2c0199f14d5a0e9916 --- otautil/include/otautil/sysutil.h | 2 +- otautil/sysutil.cpp | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/otautil/include/otautil/sysutil.h b/otautil/include/otautil/sysutil.h index d0d2e67d..5c64cff1 100644 --- a/otautil/include/otautil/sysutil.h +++ b/otautil/include/otautil/sysutil.h @@ -106,7 +106,7 @@ class MemMapping { [[noreturn]] void Reboot(std::string_view target); // Triggers a shutdown. -bool Shutdown(std::string_view target); +[[noreturn]] void Shutdown(std::string_view target); // Returns a null-terminated char* array, where the elements point to the C-strings in the given // vector, plus an additional nullptr at the end. This is a helper function that facilitates diff --git a/otautil/sysutil.cpp b/otautil/sysutil.cpp index b3ead973..2c7752e9 100644 --- a/otautil/sysutil.cpp +++ b/otautil/sysutil.cpp @@ -233,9 +233,13 @@ void Reboot(std::string_view target) { while (true) pause(); } -bool Shutdown(std::string_view target) { +void Shutdown(std::string_view target) { std::string cmd = "shutdown," + std::string(target); - return android::base::SetProperty(ANDROID_RB_PROPERTY, cmd); + if (!android::base::SetProperty(ANDROID_RB_PROPERTY, cmd)) { + LOG(FATAL) << "Shutdown failed"; + } + + while (true) pause(); } std::vector StringVectorToNullTerminatedArray(const std::vector& args) {