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; },