Skip to content

Commit 982a0af

Browse files
Fix track creation synchronization
1 parent 7841d9f commit 982a0af

File tree

1 file changed

+8
-4
lines changed

1 file changed

+8
-4
lines changed

src/impl/peerconnection.cpp

+8-4
Original file line numberDiff line numberDiff line change
@@ -751,6 +751,8 @@ void PeerConnection::remoteCloseDataChannels() {
751751
}
752752

753753
shared_ptr<Track> PeerConnection::emplaceTrack(Description::Media description) {
754+
std::unique_lock lock(mTracksMutex); // we are going to emplace
755+
754756
#if !RTC_ENABLE_MEDIA
755757
// No media support, mark as removed
756758
PLOG_WARNING << "Tracks are disabled (not compiled with media support)";
@@ -759,10 +761,12 @@ shared_ptr<Track> PeerConnection::emplaceTrack(Description::Media description) {
759761

760762
shared_ptr<Track> track;
761763
if (auto it = mTracks.find(description.mid()); it != mTracks.end())
762-
if (track = it->second.lock(); track)
763-
track->setDescription(std::move(description));
764+
if (auto t = it->second.lock(); t && !t->isClosed())
765+
track = std::move(t);
764766

765-
if (!track) {
767+
if (track) {
768+
track->setDescription(std::move(description));
769+
} else {
766770
track = std::make_shared<Track>(weak_from_this(), std::move(description));
767771
mTracks.emplace(std::make_pair(track->mid(), track));
768772
mTrackLines.emplace_back(track);
@@ -896,7 +900,7 @@ void PeerConnection::processLocalDescription(Description description) {
896900
description.addMedia(std::move(reciprocated));
897901
},
898902
[&](Description::Media *remoteMedia) {
899-
std::shared_lock lock(mTracksMutex);
903+
std::unique_lock lock(mTracksMutex); // we may emplace a track
900904
if (auto it = mTracks.find(remoteMedia->mid()); it != mTracks.end()) {
901905
// Prefer local description
902906
if (auto track = it->second.lock()) {

0 commit comments

Comments
 (0)