Actually manage memory in the old-style AOS logging
LeakSanitizer should be happy with it now. It's also still just as
thread-safe.
Change-Id: Id09a0349657cf4f719267b053f0ea3d8ec366256
diff --git a/aos/events/simulated_event_loop.cc b/aos/events/simulated_event_loop.cc
index a7301bf..c429eef 100644
--- a/aos/events/simulated_event_loop.cc
+++ b/aos/events/simulated_event_loop.cc
@@ -570,9 +570,8 @@
void Setup() {
MaybeScheduleTimingReports();
if (!skip_logger_) {
- logging::ScopedLogRestorer prev_logger;
log_sender_.Initialize(MakeSender<logging::LogMessageFbs>("/aos"));
- log_impl_ = logging::GetImplementation();
+ log_impl_ = log_sender_.implementation();
}
}
@@ -614,7 +613,7 @@
const pid_t tid_;
AosLogToFbs log_sender_;
- logging::LogImplementation *log_impl_ = nullptr;
+ std::shared_ptr<logging::LogImplementation> log_impl_ = nullptr;
};
void SimulatedEventLoopFactory::set_send_delay(
@@ -720,8 +719,8 @@
const monotonic_clock::time_point monotonic_now =
simulated_event_loop_->monotonic_now();
logging::ScopedLogRestorer prev_logger;
- if (simulated_event_loop_->log_impl_ != nullptr) {
- logging::SetImplementation(simulated_event_loop_->log_impl_);
+ if (simulated_event_loop_->log_impl_) {
+ prev_logger.Swap(simulated_event_loop_->log_impl_);
}
Context context = msgs_.front()->context;
@@ -837,8 +836,8 @@
const ::aos::monotonic_clock::time_point monotonic_now =
simulated_event_loop_->monotonic_now();
logging::ScopedLogRestorer prev_logger;
- if (simulated_event_loop_->log_impl_ != nullptr) {
- logging::SetImplementation(simulated_event_loop_->log_impl_);
+ if (simulated_event_loop_->log_impl_) {
+ prev_logger.Swap(simulated_event_loop_->log_impl_);
}
if (token_ != scheduler_->InvalidToken()) {
scheduler_->Deschedule(token_);
@@ -889,8 +888,8 @@
monotonic_clock::time_point monotonic_now =
simulated_event_loop_->monotonic_now();
logging::ScopedLogRestorer prev_logger;
- if (simulated_event_loop_->log_impl_ != nullptr) {
- logging::SetImplementation(simulated_event_loop_->log_impl_);
+ if (simulated_event_loop_->log_impl_) {
+ prev_logger.Swap(simulated_event_loop_->log_impl_);
}
Call(
[monotonic_now]() { return monotonic_now; },