From 4aa291c406752169f4d836e952708eeccbb36c5d Mon Sep 17 00:00:00 2001 From: Dean Lee Date: Mon, 13 Dec 2021 21:16:53 +0800 Subject: [PATCH] Use std::unique_ptr to manage memory (#23168) * use unique_ptr * trigger ci * move down loggerdstate --- selfdrive/boardd/boardd.cc | 25 ++++++++----------------- selfdrive/locationd/ubloxd.cc | 12 ++++-------- selfdrive/loggerd/loggerd.cc | 10 ++++------ selfdrive/loggerd/loggerd.h | 1 - 4 files changed, 16 insertions(+), 32 deletions(-) diff --git a/selfdrive/boardd/boardd.cc b/selfdrive/boardd/boardd.cc index 51471b8a2..d09738a70 100644 --- a/selfdrive/boardd/boardd.cc +++ b/selfdrive/boardd/boardd.cc @@ -208,14 +208,14 @@ void can_send_thread(std::vector pandas, bool fake_send) { util::set_thread_name("boardd_can_send"); AlignedBuffer aligned_buf; - Context * context = Context::create(); - SubSocket * subscriber = SubSocket::create(context, "sendcan"); + std::unique_ptr context(Context::create()); + std::unique_ptr subscriber(SubSocket::create(context.get(), "sendcan")); assert(subscriber != NULL); subscriber->setTimeout(100); // run as fast as messages come in while (!do_exit && check_all_connected(pandas)) { - Message * msg = subscriber->receive(); + std::unique_ptr msg(subscriber->receive()); if (!msg) { if (errno == EINTR) { do_exit = true; @@ -223,23 +223,16 @@ void can_send_thread(std::vector pandas, bool fake_send) { continue; } - capnp::FlatArrayMessageReader cmsg(aligned_buf.align(msg)); + capnp::FlatArrayMessageReader cmsg(aligned_buf.align(msg.get())); cereal::Event::Reader event = cmsg.getRoot(); //Dont send if older than 1 second - if (nanos_since_boot() - event.getLogMonoTime() < 1e9) { - if (!fake_send) { - for (const auto& panda : pandas) { - panda->can_send(event.getSendcan()); - } + if ((nanos_since_boot() - event.getLogMonoTime() < 1e9) && !fake_send) { + for (const auto& panda : pandas) { + panda->can_send(event.getSendcan()); } } - - delete msg; } - - delete subscriber; - delete context; } void can_recv_thread(std::vector pandas) { @@ -552,7 +545,7 @@ void pigeon_thread(Panda *panda) { PubMaster pm({"ubloxRaw"}); bool ignition_last = false; - Pigeon *pigeon = Hardware::TICI() ? Pigeon::connect("/dev/ttyHS0") : Pigeon::connect(panda); + std::unique_ptr pigeon(Hardware::TICI() ? Pigeon::connect("/dev/ttyHS0") : Pigeon::connect(panda)); std::unordered_map last_recv_time; std::unordered_map cls_max_dt = { @@ -620,8 +613,6 @@ void pigeon_thread(Panda *panda) { // 10ms - 100 Hz util::sleep_for(10); } - - delete pigeon; } int main(int argc, char *argv[]) { diff --git a/selfdrive/locationd/ubloxd.cc b/selfdrive/locationd/ubloxd.cc index bcf33b3f7..ae07284c8 100644 --- a/selfdrive/locationd/ubloxd.cc +++ b/selfdrive/locationd/ubloxd.cc @@ -17,14 +17,14 @@ int main() { PubMaster pm({"ubloxGnss", "gpsLocationExternal"}); - Context * context = Context::create(); - SubSocket * subscriber = SubSocket::create(context, "ubloxRaw"); + std::unique_ptr context(Context::create()); + std::unique_ptr subscriber(SubSocket::create(context.get(), "ubloxRaw")); assert(subscriber != NULL); subscriber->setTimeout(100); while (!do_exit) { - Message * msg = subscriber->receive(); + std::unique_ptr msg(subscriber->receive()); if (!msg) { if (errno == EINTR) { do_exit = true; @@ -32,7 +32,7 @@ int main() { continue; } - capnp::FlatArrayMessageReader cmsg(aligned_buf.align(msg)); + capnp::FlatArrayMessageReader cmsg(aligned_buf.align(msg.get())); cereal::Event::Reader event = cmsg.getRoot(); auto ubloxRaw = event.getUbloxRaw(); @@ -58,11 +58,7 @@ int main() { } bytes_consumed += bytes_consumed_this_time; } - delete msg; } - delete subscriber; - delete context; - return 0; } diff --git a/selfdrive/loggerd/loggerd.cc b/selfdrive/loggerd/loggerd.cc index 8b6cf9e55..37f03ef4e 100644 --- a/selfdrive/loggerd/loggerd.cc +++ b/selfdrive/loggerd/loggerd.cc @@ -185,15 +185,14 @@ void loggerd_thread() { } QlogState; std::unordered_map qlog_states; - LoggerdState s; - s.ctx = Context::create(); - Poller * poller = Poller::create(); + std::unique_ptr ctx(Context::create()); + std::unique_ptr poller(Poller::create()); // subscribe to all socks for (const auto& it : services) { if (!it.should_log) continue; - SubSocket * sock = SubSocket::create(s.ctx, it.name); + SubSocket * sock = SubSocket::create(ctx.get(), it.name); assert(sock != NULL); poller->registerSocket(sock); qlog_states[sock] = { @@ -203,6 +202,7 @@ void loggerd_thread() { }; } + LoggerdState s; // init logger logger_init(&s.logger, "rlog", true); logger_rotate(&s); @@ -266,6 +266,4 @@ void loggerd_thread() { // messaging cleanup for (auto &[sock, qs] : qlog_states) delete sock; - delete poller; - delete s.ctx; } diff --git a/selfdrive/loggerd/loggerd.h b/selfdrive/loggerd/loggerd.h index 0101a91a5..bdf5ef8f9 100644 --- a/selfdrive/loggerd/loggerd.h +++ b/selfdrive/loggerd/loggerd.h @@ -108,7 +108,6 @@ const LogCameraInfo qcam_info = { }; struct LoggerdState { - Context *ctx; LoggerState logger = {}; char segment_path[4096]; std::mutex rotate_lock;