loggerd: clean exit on SIGPWR (#20100)

* loggerd: clean exit on SIGPRW

* no SIGPWR on macos
old-commit-hash: d3dfb47d0e
commatwo_master
Willem Melching 4 years ago committed by GitHub
parent 5df5262f3b
commit a98a06c1f8
  1. 12
      selfdrive/common/util.h
  2. 5
      selfdrive/loggerd/loggerd.cc

@ -109,14 +109,24 @@ public:
ExitHandler() { ExitHandler() {
std::signal(SIGINT, (sighandler_t)set_do_exit); std::signal(SIGINT, (sighandler_t)set_do_exit);
std::signal(SIGTERM, (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<bool> power_failure = false;
inline operator bool() { return do_exit; } inline operator bool() { return do_exit; }
inline ExitHandler& operator=(bool v) { inline ExitHandler& operator=(bool v) {
do_exit = v; do_exit = v;
return *this; return *this;
} }
private: 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<bool> do_exit = false; inline static std::atomic<bool> do_exit = false;
}; };

@ -493,6 +493,11 @@ int main(int argc, char** argv) {
LOGW("closing logger"); LOGW("closing logger");
logger_close(&s.logger); logger_close(&s.logger);
if (do_exit.power_failure){
LOGE("power failure");
sync();
}
// messaging cleanup // messaging cleanup
for (auto sock : socks) delete sock; for (auto sock : socks) delete sock;
delete poller; delete poller;

Loading…
Cancel
Save