mirror of
https://github.com/sunnypilot/sunnypilot.git
synced 2026-02-18 20:03:53 +08:00
loggerd: clean exit on SIGPWR (#20100)
* loggerd: clean exit on SIGPRW
* no SIGPWR on macos
old-commit-hash: d3dfb47d0e
This commit is contained in:
@@ -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<bool> 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<bool> do_exit = false;
|
||||
};
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user