From a98a06c1f869ddff7bb14903cb3509742a919b80 Mon Sep 17 00:00:00 2001 From: Willem Melching Date: Thu, 18 Feb 2021 17:46:46 +0100 Subject: [PATCH] loggerd: clean exit on SIGPWR (#20100) * loggerd: clean exit on SIGPRW * no SIGPWR on macos old-commit-hash: d3dfb47d0e8fef18171a393005da76c98e941419 --- selfdrive/common/util.h | 12 +++++++++++- selfdrive/loggerd/loggerd.cc | 5 +++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/selfdrive/common/util.h b/selfdrive/common/util.h index adfcb4b91c..b3dfae7e73 100644 --- a/selfdrive/common/util.h +++ b/selfdrive/common/util.h @@ -109,14 +109,24 @@ public: ExitHandler() { std::signal(SIGINT, (sighandler_t)set_do_exit); std::signal(SIGTERM, (sighandler_t)set_do_exit); + +#ifndef __APPLE__ + std::signal(SIGPWR, (sighandler_t)set_do_exit); +#endif }; + inline static std::atomic power_failure = false; inline operator bool() { return do_exit; } inline ExitHandler& operator=(bool v) { do_exit = v; return *this; } private: - static void set_do_exit(int sig) { do_exit = true; } + static void set_do_exit(int sig) { +#ifndef __APPLE__ + power_failure = (sig == SIGPWR); +#endif + do_exit = true; + } inline static std::atomic do_exit = false; }; diff --git a/selfdrive/loggerd/loggerd.cc b/selfdrive/loggerd/loggerd.cc index 200e34e06a..be6ed3faf0 100644 --- a/selfdrive/loggerd/loggerd.cc +++ b/selfdrive/loggerd/loggerd.cc @@ -493,6 +493,11 @@ int main(int argc, char** argv) { LOGW("closing logger"); logger_close(&s.logger); + if (do_exit.power_failure){ + LOGE("power failure"); + sync(); + } + // messaging cleanup for (auto sock : socks) delete sock; delete poller;