summaryrefslogtreecommitdiff
path: root/src/tracing/agent.cc
diff options
context:
space:
mode:
authorAli Ijaz Sheikh <ofrobots@google.com>2018-12-26 16:55:36 -0800
committerAnna Henningsen <anna@addaleax.net>2019-01-08 00:43:48 +0100
commitf39b3e33719cdb7102e9ae7b67a13de4dd681949 (patch)
treea0efaf1ea3da35a2b4f2efd38bbea63adf624c23 /src/tracing/agent.cc
parent86ae2c182b425e08e8a98fcd47220d452cc94f53 (diff)
downloadandroid-node-v8-f39b3e33719cdb7102e9ae7b67a13de4dd681949.tar.gz
android-node-v8-f39b3e33719cdb7102e9ae7b67a13de4dd681949.tar.bz2
android-node-v8-f39b3e33719cdb7102e9ae7b67a13de4dd681949.zip
src: trace_events: fix race with metadata events
Multiple threads may be concurrently adding to the metadata_events list. Protect access with a mutex. Fixes: https://github.com/nodejs/node/issues/24129 PR-URL: https://github.com/nodejs/node/pull/25235 Reviewed-By: Anna Henningsen <anna@addaleax.net>
Diffstat (limited to 'src/tracing/agent.cc')
-rw-r--r--src/tracing/agent.cc12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/tracing/agent.cc b/src/tracing/agent.cc
index 103df55da5..3d19c6c758 100644
--- a/src/tracing/agent.cc
+++ b/src/tracing/agent.cc
@@ -207,9 +207,17 @@ void Agent::AppendTraceEvent(TraceObject* trace_event) {
id_writer.second->AppendTraceEvent(trace_event);
}
+void Agent::AddMetadataEvent(std::unique_ptr<TraceObject> event) {
+ Mutex::ScopedLock lock(metadata_events_mutex_);
+ metadata_events_.push_back(std::move(event));
+}
+
void Agent::Flush(bool blocking) {
- for (const auto& event : metadata_events_)
- AppendTraceEvent(event.get());
+ {
+ Mutex::ScopedLock lock(metadata_events_mutex_);
+ for (const auto& event : metadata_events_)
+ AppendTraceEvent(event.get());
+ }
for (const auto& id_writer : writers_)
id_writer.second->Flush(blocking);