diff --git a/cereal b/cereal index b1675bac3d..546ebbff46 160000 --- a/cereal +++ b/cereal @@ -1 +1 @@ -Subproject commit b1675bac3d0f759605748daeb93e801a76f7d729 +Subproject commit 546ebbff46129463523d086d073cd937b3feb1bc diff --git a/selfdrive/common/util.h b/selfdrive/common/util.h index 7af78ae798..8decb030d0 100644 --- a/selfdrive/common/util.h +++ b/selfdrive/common/util.h @@ -150,8 +150,10 @@ public: #endif }; inline static std::atomic power_failure = false; + inline static std::atomic signal = 0; inline operator bool() { return do_exit; } inline ExitHandler& operator=(bool v) { + signal = 0; do_exit = v; return *this; } @@ -160,6 +162,7 @@ private: #ifndef __APPLE__ power_failure = (sig == SIGPWR); #endif + signal = sig; do_exit = true; } inline static std::atomic do_exit = false; diff --git a/selfdrive/loggerd/logger.cc b/selfdrive/loggerd/logger.cc index e2308ef73a..442d792838 100644 --- a/selfdrive/loggerd/logger.cc +++ b/selfdrive/loggerd/logger.cc @@ -130,10 +130,11 @@ void log_init_data(LoggerState *s) { } -static void log_sentinel(LoggerState *s, cereal::Sentinel::SentinelType type) { +static void log_sentinel(LoggerState *s, cereal::Sentinel::SentinelType type, int signal=0) { MessageBuilder msg; auto sen = msg.initEvent().initSentinel(); sen.setType(type); + sen.setSignal(signal); auto bytes = msg.toBytes(); logger_log(s, bytes.begin(), bytes.size(), true); @@ -244,8 +245,9 @@ void logger_log(LoggerState *s, uint8_t* data, size_t data_size, bool in_qlog) { pthread_mutex_unlock(&s->lock); } -void logger_close(LoggerState *s) { - log_sentinel(s, cereal::Sentinel::SentinelType::END_OF_ROUTE); +void logger_close(LoggerState *s, ExitHandler *exit_handler) { + int signal = exit_handler == nullptr ? 0 : exit_handler->signal.load(); + log_sentinel(s, cereal::Sentinel::SentinelType::END_OF_ROUTE, signal); pthread_mutex_lock(&s->lock); if (s->cur_handle) { diff --git a/selfdrive/loggerd/logger.h b/selfdrive/loggerd/logger.h index f530a2b049..feea52572d 100644 --- a/selfdrive/loggerd/logger.h +++ b/selfdrive/loggerd/logger.h @@ -83,7 +83,7 @@ int logger_next(LoggerState *s, const char* root_path, char* out_segment_path, size_t out_segment_path_len, int* out_part); LoggerHandle* logger_get_handle(LoggerState *s); -void logger_close(LoggerState *s); +void logger_close(LoggerState *s, ExitHandler *exit_handler=nullptr); void logger_log(LoggerState *s, uint8_t* data, size_t data_size, bool in_qlog); void lh_log(LoggerHandle* h, uint8_t* data, size_t data_size, bool in_qlog); diff --git a/selfdrive/loggerd/loggerd.cc b/selfdrive/loggerd/loggerd.cc index c55115402e..9a64205907 100644 --- a/selfdrive/loggerd/loggerd.cc +++ b/selfdrive/loggerd/loggerd.cc @@ -468,7 +468,7 @@ int main(int argc, char** argv) { for (auto &t : encoder_threads) t.join(); LOGW("closing logger"); - logger_close(&s.logger); + logger_close(&s.logger, &do_exit); if (do_exit.power_failure){ LOGE("power failure");