diff --git a/selfdrive/loggerd/bootlog.cc b/selfdrive/loggerd/bootlog.cc index e15d84c5db..3f01b9515e 100644 --- a/selfdrive/loggerd/bootlog.cc +++ b/selfdrive/loggerd/bootlog.cc @@ -22,13 +22,6 @@ int main(int argc, char** argv) { std::string path = LOG_ROOT + "/boot/" + std::string(filename); LOGW("bootlog to %s", path.c_str()); - MessageBuilder boot_msg; - logger_build_boot(boot_msg); - - MessageBuilder init_msg; - logger_build_init_data(init_msg); - - // Open bootlog int r = logger_mkpath((char*)path.c_str()); assert(r == 0); @@ -42,12 +35,14 @@ int main(int argc, char** argv) { assert(bzerror == BZ_OK); // Write initdata - auto bytes = init_msg.toBytes(); + kj::Array init_msg = logger_build_init_data(); + auto bytes = init_msg.asBytes(); BZ2_bzWrite(&bzerror, bz_file, bytes.begin(), bytes.size()); assert(bzerror == BZ_OK); // Write bootlog - bytes = boot_msg.toBytes(); + kj::Array boot_msg = logger_build_boot(); + bytes = boot_msg.asBytes(); BZ2_bzWrite(&bzerror, bz_file, bytes.begin(), bytes.size()); assert(bzerror == BZ_OK); diff --git a/selfdrive/loggerd/logger.cc b/selfdrive/loggerd/logger.cc index a6f2232682..a61881c78e 100644 --- a/selfdrive/loggerd/logger.cc +++ b/selfdrive/loggerd/logger.cc @@ -52,7 +52,8 @@ int logger_mkpath(char* file_path) { } // ***** log metadata ***** -void logger_build_boot(MessageBuilder &msg) { +kj::Array logger_build_boot() { + MessageBuilder msg; auto boot = msg.initEvent().initBoot(); boot.setWallTimeNanos(nanos_since_epoch()); @@ -65,9 +66,11 @@ void logger_build_boot(MessageBuilder &msg) { std::string launchLog = util::read_file("/tmp/launch_log"); boot.setLaunchLog(capnp::Text::Reader(launchLog.data(), launchLog.size())); + return capnp::messageToFlatArray(msg); } -void logger_build_init_data(MessageBuilder &msg) { +kj::Array logger_build_init_data() { + MessageBuilder msg; auto init = msg.initEvent().initInitData(); if (util::file_exists("/EON")) { @@ -132,12 +135,11 @@ void logger_build_init_data(MessageBuilder &msg) { i++; } } + return capnp::messageToFlatArray(msg); } void log_init_data(LoggerState *s) { - MessageBuilder msg; - logger_build_init_data(msg); - auto bytes = msg.toBytes(); + auto bytes = s->init_data.asBytes(); logger_log(s, bytes.begin(), bytes.size(), s->has_qlog); } @@ -154,8 +156,6 @@ static void log_sentinel(LoggerState *s, cereal::Sentinel::SentinelType type) { // ***** logging functions ***** void logger_init(LoggerState *s, const char* log_name, bool has_qlog) { - memset(s, 0, sizeof(*s)); - umask(0); pthread_mutex_init(&s->lock, NULL); @@ -170,6 +170,8 @@ void logger_init(LoggerState *s, const char* log_name, bool has_qlog) { strftime(s->route_name, sizeof(s->route_name), "%Y-%m-%d--%H-%M-%S", &timeinfo); snprintf(s->log_name, sizeof(s->log_name), "%s", log_name); + + s->init_data = logger_build_init_data(); } static LoggerHandle* logger_open(LoggerState *s, const char* root_path) { diff --git a/selfdrive/loggerd/logger.h b/selfdrive/loggerd/logger.h index fc05513e5b..f355586661 100644 --- a/selfdrive/loggerd/logger.h +++ b/selfdrive/loggerd/logger.h @@ -32,6 +32,7 @@ typedef struct LoggerHandle { typedef struct LoggerState { pthread_mutex_t lock; int part; + kj::Array init_data; char route_name[64]; char log_name[64]; bool has_qlog; @@ -41,8 +42,8 @@ typedef struct LoggerState { } LoggerState; int logger_mkpath(char* file_path); -void logger_build_boot(MessageBuilder &msg); -void logger_build_init_data(MessageBuilder &msg); +kj::Array logger_build_boot(); +kj::Array logger_build_init_data(); void logger_init(LoggerState *s, const char* log_name, bool has_qlog); int logger_next(LoggerState *s, const char* root_path, char* out_segment_path, size_t out_segment_path_len, diff --git a/selfdrive/loggerd/loggerd.cc b/selfdrive/loggerd/loggerd.cc index 862d958047..1d1daa4ba8 100644 --- a/selfdrive/loggerd/loggerd.cc +++ b/selfdrive/loggerd/loggerd.cc @@ -161,7 +161,7 @@ private: struct LoggerdState { Context *ctx; - LoggerState logger; + LoggerState logger = {}; char segment_path[4096]; int rotate_segment; pthread_mutex_t rotate_lock;