Skip to content

Commit 807e732

Browse 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

File tree

2 files changed

+13
-5
lines changed

2 files changed

+13
-5
lines changed

src/tracing/agent.cc

+10-2
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);

src/tracing/agent.h

+3-3
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)