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

pull/21032/head
Willem Melching 4 years ago committed by GitHub
parent ba5d6bbd70
commit 6e22f16ddb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  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
};
inline static std::atomic<bool> power_failure = false;
inline static std::atomic<int> 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<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;
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) {

@ -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);

@ -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");

Loading…
Cancel
Save