GeezerVison is showing github.com — src: trace_events: fix race with metadata events · nodejs/node@807e732
File tree
Expand file treeCollapse file tree
Open diff view settings
Expand file treeCollapse file tree
Open diff view settings
Collapse file
Copy file name to clipboardExpand all lines: src/tracing/agent.cc +10-2Lines changed: 10 additions & 2 deletions | Original file line number | Diff line number | Diff line change |
|---|
@@ -207,9 +207,17 @@ void Agent::AppendTraceEvent(TraceObject* trace_event) { |
207 | 207 | id_writer.second->AppendTraceEvent(trace_event); |
208 | 208 | } |
209 | 209 |
|
| 210 | +void Agent::AddMetadataEvent(std::unique_ptr<TraceObject> event) { |
| 211 | + Mutex::ScopedLock lock(metadata_events_mutex_); |
| 212 | + metadata_events_.push_back(std::move(event)); |
| 213 | +} |
| 214 | + |
210 | 215 | void Agent::Flush(bool blocking) { |
211 | | - for (const auto& event : metadata_events_) |
212 | | - AppendTraceEvent(event.get()); |
| 216 | + { |
| 217 | + Mutex::ScopedLock lock(metadata_events_mutex_); |
| 218 | + for (const auto& event : metadata_events_) |
| 219 | + AppendTraceEvent(event.get()); |
| 220 | + } |
213 | 221 |
|
214 | 222 | for (const auto& id_writer : writers_) |
215 | 223 | id_writer.second->Flush(blocking); |
|
Collapse file
Copy file name to clipboardExpand all lines: src/tracing/agent.h +3-3Lines changed: 3 additions & 3 deletions | Original file line number | Diff line number | Diff line change |
|---|
@@ -104,9 +104,7 @@ class Agent { |
104 | 104 | // Writes to all writers registered through AddClient(). |
105 | 105 | void AppendTraceEvent(TraceObject* trace_event); |
106 | 106 |
|
107 | | - void AddMetadataEvent(std::unique_ptr<TraceObject> event) { |
108 | | - metadata_events_.push_back(std::move(event)); |
109 | | - } |
| 107 | + void AddMetadataEvent(std::unique_ptr<TraceObject> event); |
110 | 108 | // Flushes all writers registered through AddClient(). |
111 | 109 | void Flush(bool blocking); |
112 | 110 |
|
@@ -145,6 +143,8 @@ class Agent { |
145 | 143 | ConditionVariable initialize_writer_condvar_; |
146 | 144 | uv_async_t initialize_writer_async_; |
147 | 145 | std::set<AsyncTraceWriter*> to_be_initialized_; |
| 146 | + |
| 147 | + Mutex metadata_events_mutex_; |
148 | 148 | std::list<std::unique_ptr<TraceObject>> metadata_events_; |
149 | 149 | }; |
150 | 150 |
|
|