make queue_testutils logging thread-safe and test it

Change-Id: I0d1ed4831cb3cfde4a172839bcc1f2b02756f5f3
diff --git a/aos/common/queue_testutils.cc b/aos/common/queue_testutils.cc
index d71d023..a40b5e9 100644
--- a/aos/common/queue_testutils.cc
+++ b/aos/common/queue_testutils.cc
@@ -10,6 +10,7 @@
 #include "aos/common/queue.h"
 #include "aos/common/logging/logging_impl.h"
 #include "aos/common/once.h"
+#include "aos/common/mutex.h"
 
 using ::aos::logging::LogMessage;
 
@@ -31,11 +32,13 @@
 
   // Clears out all of the messages already recorded.
   void ClearMessages() {
+    ::aos::MutexLocker locker(&messages_mutex_);
     messages_.clear();
   }
 
   // Prints out all of the messages (like when a test fails).
   void PrintAllMessages() {
+    ::aos::MutexLocker locker(&messages_mutex_);
     for (auto it = messages_.begin(); it != messages_.end(); ++it) {
       logging::internal::PrintMessage(stdout, *it);
     }
@@ -66,6 +69,7 @@
   }
 
   virtual void HandleMessage(const LogMessage &message) override {
+    ::aos::MutexLocker locker(&messages_mutex_);
     if (message.level == FATAL || print_as_messages_come_in_) {
       logging::internal::PrintMessage(output_file_, message);
     }
@@ -76,6 +80,7 @@
   ::std::vector<LogMessage> messages_;
   bool print_as_messages_come_in_ = false;
   FILE *output_file_ = stdout;
+  ::aos::Mutex messages_mutex_;
 };
 
 class MyTestEventListener : public ::testing::EmptyTestEventListener {