[rt/misc] Make EventRecorder thread-safe (#9268)
author이한종/On-Device Lab(SR)/Engineer/삼성전자 <hanjoung.lee@samsung.com>
Thu, 28 Nov 2019 06:26:09 +0000 (15:26 +0900)
committerGitHub Enterprise <noreply-CODE@samsung.com>
Thu, 28 Nov 2019 06:26:09 +0000 (15:26 +0900)
Make EventRecorder thread-safe for parallel execution.

Signed-off-by: Hanjoung Lee <hanjoung.lee@samsung.com>
runtime/libs/misc/include/misc/EventRecorder.h
runtime/libs/misc/src/EventRecorder.cpp

index 9cc9921..e5fb34d 100644 (file)
@@ -19,6 +19,7 @@
 
 #include <map>
 #include <memory>
+#include <mutex>
 
 #include <ostream>
 
@@ -63,6 +64,7 @@ public:
   void fini();
 
 private:
+  std::mutex _mu;
   std::ostream &_os;
 };
 
index 7c3ab74..7d904f2 100644 (file)
@@ -109,15 +109,30 @@ std::string object(const CounterEvent &evt)
 
 void EventRecorder::init()
 {
+  std::lock_guard<std::mutex> lock{_mu};
+
   _os << "{" << std::endl;
   _os << "  " << quote("traceEvents") << ": [\n";
 }
 
-void EventRecorder::emit(const DurationEvent &evt) { _os << "    " << object(evt) << ",\n"; }
-void EventRecorder::emit(const CounterEvent &evt) { _os << "    " << object(evt) << ",\n"; }
+void EventRecorder::emit(const DurationEvent &evt)
+{
+  std::lock_guard<std::mutex> lock{_mu};
+
+  _os << "    " << object(evt) << ",\n";
+}
+
+void EventRecorder::emit(const CounterEvent &evt)
+{
+  std::lock_guard<std::mutex> lock{_mu};
+
+  _os << "    " << object(evt) << ",\n";
+}
 
 void EventRecorder::fini()
 {
+  std::lock_guard<std::mutex> lock{_mu};
+
   _os << "    { }\n";
   _os << "  ]\n";
   _os << "}\n";