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