loggerd: put signal in end of route sentinel (#21025)

old-commit-hash: 6e22f16ddb
commatwo_master
Willem Melching 4 years ago committed by GitHub
parent 9754f9fdc5
commit 80ec32bcf3
  1. 2
      cereal
  2. 3
      selfdrive/common/util.h
  3. 8
      selfdrive/loggerd/logger.cc
  4. 2
      selfdrive/loggerd/logger.h
  5. 2
      selfdrive/loggerd/loggerd.cc

@ -1 +1 @@
Subproject commit b1675bac3d0f759605748daeb93e801a76f7d729 Subproject commit 546ebbff46129463523d086d073cd937b3feb1bc

@ -150,8 +150,10 @@ public:
#endif #endif
}; };
inline static std::atomic<bool> power_failure = false; inline static std::atomic<bool> power_failure = false;
inline static std::atomic<int> signal = 0;
inline operator bool() { return do_exit; } inline operator bool() { return do_exit; }
inline ExitHandler& operator=(bool v) { inline ExitHandler& operator=(bool v) {
signal = 0;
do_exit = v; do_exit = v;
return *this; return *this;
} }
@ -160,6 +162,7 @@ private:
#ifndef __APPLE__ #ifndef __APPLE__
power_failure = (sig == SIGPWR); power_failure = (sig == SIGPWR);
#endif #endif
signal = sig;
do_exit = true; do_exit = true;
} }
inline static std::atomic<bool> do_exit = false; inline static std::atomic<bool> do_exit = false;

@ -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; MessageBuilder msg;
auto sen = msg.initEvent().initSentinel(); auto sen = msg.initEvent().initSentinel();
sen.setType(type); sen.setType(type);
sen.setSignal(signal);
auto bytes = msg.toBytes(); auto bytes = msg.toBytes();
logger_log(s, bytes.begin(), bytes.size(), true); 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); pthread_mutex_unlock(&s->lock);
} }
void logger_close(LoggerState *s) { void logger_close(LoggerState *s, ExitHandler *exit_handler) {
log_sentinel(s, cereal::Sentinel::SentinelType::END_OF_ROUTE); 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); pthread_mutex_lock(&s->lock);
if (s->cur_handle) { if (s->cur_handle) {

@ -83,7 +83,7 @@ int logger_next(LoggerState *s, const char* root_path,
char* out_segment_path, size_t out_segment_path_len, char* out_segment_path, size_t out_segment_path_len,
int* out_part); int* out_part);
LoggerHandle* logger_get_handle(LoggerState *s); 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 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); void lh_log(LoggerHandle* h, uint8_t* data, size_t data_size, bool in_qlog);

@ -468,7 +468,7 @@ int main(int argc, char** argv) {
for (auto &t : encoder_threads) t.join(); for (auto &t : encoder_threads) t.join();
LOGW("closing logger"); LOGW("closing logger");
logger_close(&s.logger); logger_close(&s.logger, &do_exit);
if (do_exit.power_failure){ if (do_exit.power_failure){
LOGE("power failure"); LOGE("power failure");

Loading…
Cancel
Save