mirror of
https://github.com/firestar5683/StarPilot.git
synced 2026-08-22 00:33:44 +08:00
bootlog: fix dangling pointer problem in logger_build_boot (#19942)
* fix dangling pointer problem * logger_build_init_data() has same problem * return kj::Array<capnp::byte> * Revert "return kj::Array<capnp::byte>" This reverts commit 4df4685bfcaba0c5400e2690440a74c32ff75afa. * Empty commit,trigger Build * fix each segment in a route having a different initial logMonoTime old-commit-hash: 79e05965c403289dbe75622ac5a9970218163959
This commit is contained in:
@@ -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<capnp::word> 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<capnp::word> boot_msg = logger_build_boot();
|
||||
bytes = boot_msg.asBytes();
|
||||
BZ2_bzWrite(&bzerror, bz_file, bytes.begin(), bytes.size());
|
||||
assert(bzerror == BZ_OK);
|
||||
|
||||
|
||||
@@ -52,7 +52,8 @@ int logger_mkpath(char* file_path) {
|
||||
}
|
||||
|
||||
// ***** log metadata *****
|
||||
void logger_build_boot(MessageBuilder &msg) {
|
||||
kj::Array<capnp::word> 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<capnp::word> 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) {
|
||||
|
||||
@@ -32,6 +32,7 @@ typedef struct LoggerHandle {
|
||||
typedef struct LoggerState {
|
||||
pthread_mutex_t lock;
|
||||
int part;
|
||||
kj::Array<capnp::word> 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<capnp::word> logger_build_boot();
|
||||
kj::Array<capnp::word> 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,
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user