Skip to content

Commit 2c2d71c

Browse files
ofrobotsBethGriggs
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 <[email protected]>
1 parent 28741eb commit 2c2d71c

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
@@ -102,9 +102,7 @@ class Agent {
102102
// Writes to all writers registered through AddClient().
103103
void AppendTraceEvent(TraceObject* trace_event);
104104

105-
void AddMetadataEvent(std::unique_ptr<TraceObject> event) {
106-
metadata_events_.push_back(std::move(event));
107-
}
105+
void AddMetadataEvent(std::unique_ptr<TraceObject> event);
108106
// Flushes all writers registered through AddClient().
109107
void Flush(bool blocking);
110108

@@ -143,6 +141,8 @@ class Agent {
143141
ConditionVariable initialize_writer_condvar_;
144142
uv_async_t initialize_writer_async_;
145143
std::set<AsyncTraceWriter*> to_be_initialized_;
144+
145+
Mutex metadata_events_mutex_;
146146
std::list<std::unique_ptr<TraceObject>> metadata_events_;
147147
};
148148

0 commit comments

Comments
 (0)