@@ -197,7 +197,10 @@ void LocalParticipant::publishTrack(const std::shared_ptr<Track>& track, const T
197197 auto publication = std::make_shared<LocalTrackPublication>(owned_pub);
198198
199199 const std::string sid = publication->sid ();
200- published_tracks_by_sid_[sid] = std::weak_ptr<Track>(track);
200+ {
201+ const std::scoped_lock<std::mutex> lock (published_tracks_mutex_);
202+ published_tracks_by_sid_[sid] = std::weak_ptr<Track>(track);
203+ }
201204
202205 track->setPublication (publication);
203206}
@@ -237,6 +240,7 @@ void LocalParticipant::unpublishTrack(const std::string& track_sid) {
237240
238241 fut.get ();
239242
243+ const std::scoped_lock<std::mutex> lock (published_tracks_mutex_);
240244 if (auto it = published_tracks_by_sid_.find (track_sid); it != published_tracks_by_sid_.end ()) {
241245 if (auto t = it->second .lock ()) {
242246 t->setPublication (nullptr );
@@ -247,6 +251,7 @@ void LocalParticipant::unpublishTrack(const std::string& track_sid) {
247251
248252LocalParticipant::PublicationMap LocalParticipant::trackPublications () const {
249253 PublicationMap out;
254+ const std::scoped_lock<std::mutex> lock (published_tracks_mutex_);
250255 for (auto it = published_tracks_by_sid_.begin (); it != published_tracks_by_sid_.end ();) {
251256 auto t = it->second .lock ();
252257 if (!t) {
@@ -443,6 +448,7 @@ void LocalParticipant::handleRpcMethodInvocation(uint64_t invocation_id, const s
443448}
444449
445450std::shared_ptr<TrackPublication> LocalParticipant::findTrackPublication (const std::string& sid) const {
451+ const std::scoped_lock<std::mutex> lock (published_tracks_mutex_);
446452 auto it = published_tracks_by_sid_.find (sid);
447453 if (it == published_tracks_by_sid_.end ()) {
448454 return nullptr ;
0 commit comments