Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 807e732

Browse filesBrowse files
ofrobotsaddaleax
authored andcommitted
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: #24129 PR-URL: #25235 Reviewed-By: Anna Henningsen <anna@addaleax.net>
1 parent 354fba1 commit 807e732
Copy full SHA for 807e732

File tree

Expand file treeCollapse file tree

2 files changed

+13
-5
lines changed
Open diff view settings
Filter options
Expand file treeCollapse file tree

2 files changed

+13
-5
lines changed
Open diff view settings
Collapse file

‎src/tracing/agent.cc‎

Copy file name to clipboardExpand all lines: src/tracing/agent.cc
+10-2Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -207,9 +207,17 @@ void Agent::AppendTraceEvent(TraceObject* trace_event) {
207207
id_writer.second->AppendTraceEvent(trace_event);
208208
}
209209

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+
210215
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+
}
213221

214222
for (const auto& id_writer : writers_)
215223
id_writer.second->Flush(blocking);
Collapse file

‎src/tracing/agent.h‎

Copy file name to clipboardExpand all lines: src/tracing/agent.h
+3-3Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -104,9 +104,7 @@ class Agent {
104104
// Writes to all writers registered through AddClient().
105105
void AppendTraceEvent(TraceObject* trace_event);
106106

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);
110108
// Flushes all writers registered through AddClient().
111109
void Flush(bool blocking);
112110

@@ -145,6 +143,8 @@ class Agent {
145143
ConditionVariable initialize_writer_condvar_;
146144
uv_async_t initialize_writer_async_;
147145
std::set<AsyncTraceWriter*> to_be_initialized_;
146+
147+
Mutex metadata_events_mutex_;
148148
std::list<std::unique_ptr<TraceObject>> metadata_events_;
149149
};
150150

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.