Merge changes Ia150604c,Id4b9565f
* changes: init: Remove the DebugRebootLogging() function init: Combine two if-statements
This commit is contained in:
commit
b28e508220
3 changed files with 17 additions and 40 deletions
|
@ -255,7 +255,6 @@ static class ShutdownState {
|
|||
return {};
|
||||
}
|
||||
|
||||
bool do_shutdown() const { return do_shutdown_; }
|
||||
void set_do_shutdown(bool value) { do_shutdown_ = value; }
|
||||
|
||||
private:
|
||||
|
@ -264,31 +263,6 @@ static class ShutdownState {
|
|||
bool do_shutdown_ = false;
|
||||
} shutdown_state;
|
||||
|
||||
static void UnwindMainThreadStack() {
|
||||
unwindstack::AndroidLocalUnwinder unwinder;
|
||||
unwindstack::AndroidUnwinderData data;
|
||||
if (!unwinder.Unwind(data)) {
|
||||
LOG(ERROR) << __FUNCTION__
|
||||
<< "sys.powerctl: Failed to unwind callstack: " << data.GetErrorString();
|
||||
}
|
||||
for (const auto& frame : data.frames) {
|
||||
LOG(ERROR) << "sys.powerctl: " << unwinder.FormatFrame(frame);
|
||||
}
|
||||
}
|
||||
|
||||
void DebugRebootLogging() {
|
||||
LOG(INFO) << "sys.powerctl: do_shutdown: " << shutdown_state.do_shutdown()
|
||||
<< " IsShuttingDown: " << IsShuttingDown();
|
||||
if (shutdown_state.do_shutdown()) {
|
||||
LOG(ERROR) << "sys.powerctl set while a previous shutdown command has not been handled";
|
||||
UnwindMainThreadStack();
|
||||
}
|
||||
if (IsShuttingDown()) {
|
||||
LOG(ERROR) << "sys.powerctl set while init is already shutting down";
|
||||
UnwindMainThreadStack();
|
||||
}
|
||||
}
|
||||
|
||||
void DumpState() {
|
||||
ServiceList::GetInstance().DumpState();
|
||||
ActionManager::GetInstance().DumpState();
|
||||
|
@ -1109,8 +1083,11 @@ int SecondStageMain(int argc, char** argv) {
|
|||
// Restore prio before main loop
|
||||
setpriority(PRIO_PROCESS, 0, 0);
|
||||
while (true) {
|
||||
// By default, sleep until something happens.
|
||||
std::optional<std::chrono::milliseconds> epoll_timeout;
|
||||
// By default, sleep until something happens. Do not convert far_future into
|
||||
// std::chrono::milliseconds because that would trigger an overflow. The unit of boot_clock
|
||||
// is 1ns.
|
||||
const boot_clock::time_point far_future = boot_clock::time_point::max();
|
||||
boot_clock::time_point next_action_time = far_future;
|
||||
|
||||
auto shutdown_command = shutdown_state.CheckShutdown();
|
||||
if (shutdown_command) {
|
||||
|
@ -1122,23 +1099,28 @@ int SecondStageMain(int argc, char** argv) {
|
|||
|
||||
if (!(prop_waiter_state.MightBeWaiting() || Service::is_exec_service_running())) {
|
||||
am.ExecuteOneCommand();
|
||||
// If there's more work to do, wake up again immediately.
|
||||
if (am.HasMoreCommands()) {
|
||||
next_action_time = boot_clock::now();
|
||||
}
|
||||
}
|
||||
// Since the above code examined pending actions, no new actions must be
|
||||
// queued by the code between this line and the Epoll::Wait() call below
|
||||
// without calling WakeMainInitThread().
|
||||
if (!IsShuttingDown()) {
|
||||
auto next_process_action_time = HandleProcessActions();
|
||||
|
||||
// If there's a process that needs restarting, wake up in time for that.
|
||||
if (next_process_action_time) {
|
||||
epoll_timeout = std::chrono::ceil<std::chrono::milliseconds>(
|
||||
*next_process_action_time - boot_clock::now());
|
||||
if (epoll_timeout < 0ms) epoll_timeout = 0ms;
|
||||
next_action_time = std::min(next_action_time, *next_process_action_time);
|
||||
}
|
||||
}
|
||||
|
||||
if (!(prop_waiter_state.MightBeWaiting() || Service::is_exec_service_running())) {
|
||||
// If there's more work to do, wake up again immediately.
|
||||
if (am.HasMoreCommands()) epoll_timeout = 0ms;
|
||||
std::optional<std::chrono::milliseconds> epoll_timeout;
|
||||
if (next_action_time != far_future) {
|
||||
epoll_timeout = std::chrono::ceil<std::chrono::milliseconds>(
|
||||
std::max(next_action_time - boot_clock::now(), 0ns));
|
||||
}
|
||||
|
||||
auto epoll_result = epoll.Wait(epoll_timeout);
|
||||
if (!epoll_result.ok()) {
|
||||
LOG(ERROR) << epoll_result.error();
|
||||
|
|
|
@ -42,8 +42,6 @@ void SendLoadPersistentPropertiesMessage();
|
|||
void PropertyChanged(const std::string& name, const std::string& value);
|
||||
bool QueueControlMessage(const std::string& message, const std::string& name, pid_t pid, int fd);
|
||||
|
||||
void DebugRebootLogging();
|
||||
|
||||
int SecondStageMain(int argc, char** argv);
|
||||
|
||||
int StopServicesFromApex(const std::string& apex_name);
|
||||
|
|
|
@ -550,9 +550,6 @@ std::optional<uint32_t> HandlePropertySet(const std::string& name, const std::st
|
|||
}
|
||||
LOG(INFO) << "Received sys.powerctl='" << value << "' from pid: " << cr.pid
|
||||
<< process_log_string;
|
||||
if (!value.empty()) {
|
||||
DebugRebootLogging();
|
||||
}
|
||||
if (value == "reboot,userspace" && !is_userspace_reboot_supported().value_or(false)) {
|
||||
*error = "Userspace reboot is not supported by this device";
|
||||
return {PROP_ERROR_INVALID_VALUE};
|
||||
|
|
Loading…
Reference in a new issue