Browse Source

Lock remote description only when necessary

Paul-Louis Ageneau 5 years ago
parent
commit
b68ccb4d71
1 changed files with 3 additions and 3 deletions
  1. 3 3
      src/peerconnection.cpp

+ 3 - 3
src/peerconnection.cpp

@@ -134,14 +134,11 @@ void PeerConnection::setRemoteDescription(Description description) {
 }
 
 void PeerConnection::addRemoteCandidate(Candidate candidate) {
-	std::lock_guard lock(mRemoteDescriptionMutex);
 
 	auto iceTransport = std::atomic_load(&mIceTransport);
 	if (!mRemoteDescription || !iceTransport)
 		throw std::logic_error("Remote candidate set without remote description");
 
-	mRemoteDescription->addCandidate(candidate);
-
 	if (candidate.resolve(Candidate::ResolveMode::Simple)) {
 		iceTransport->addRemoteCandidate(candidate);
 	} else {
@@ -154,6 +151,9 @@ void PeerConnection::addRemoteCandidate(Candidate candidate) {
 		});
 		t.detach();
 	}
+
+	std::lock_guard lock(mRemoteDescriptionMutex);
+	mRemoteDescription->addCandidate(candidate);
 }
 
 std::optional<string> PeerConnection::localAddress() const {