mirror of
https://github.com/dragonpilot/dragonpilot.git
synced 2026-10-01 03:43:42 +08:00
loggerd: put signal in end of route sentinel (#21025)
This commit is contained in:
+1
-1
Submodule cereal updated: b1675bac3d...546ebbff46
@@ -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");
|
||||||
|
|||||||
Reference in New Issue
Block a user