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

This commit is contained in:
Willem Melching
2021-05-25 17:34:40 +02:00
committed by GitHub
parent ba5d6bbd70
commit 6e22f16ddb
5 changed files with 11 additions and 6 deletions

2
cereal

Submodule cereal updated: b1675bac3d...546ebbff46

View File

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

View File

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

View File

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

View File

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