Browse Source

Don't wait for resolve threads on destruction

Paul-Louis Ageneau 5 years ago
parent
commit
d27ed8aab0
2 changed files with 7 additions and 9 deletions
  1. 0 2
      include/rtc/peerconnection.hpp
  2. 7 7
      src/peerconnection.cpp

+ 0 - 2
include/rtc/peerconnection.hpp

@@ -114,8 +114,6 @@ private:
 	std::atomic<State> mState;
 	std::atomic<GatheringState> mGatheringState;
 
-	std::list<std::thread> mResolveThreads;
-
 	std::function<void(std::shared_ptr<DataChannel> dataChannel)> mDataChannelCallback;
 	std::function<void(const Description &description)> mLocalDescriptionCallback;
 	std::function<void(const Candidate &candidate)> mLocalCandidateCallback;

+ 7 - 7
src/peerconnection.cpp

@@ -37,10 +37,7 @@ PeerConnection::PeerConnection() : PeerConnection(Configuration()) {}
 PeerConnection::PeerConnection(const Configuration &config)
     : mConfig(config), mCertificate(make_certificate("libdatachannel")), mState(State::New) {}
 
-PeerConnection::~PeerConnection() {
-	for (auto &t : mResolveThreads)
-		t.join();
-}
+PeerConnection::~PeerConnection() {}
 
 const Configuration *PeerConnection::config() const { return &mConfig; }
 
@@ -94,10 +91,13 @@ void PeerConnection::addRemoteCandidate(Candidate candidate) {
 		mIceTransport->addRemoteCandidate(candidate);
 	} else {
 		// OK, we might need a lookup, do it asynchronously
-		mResolveThreads.emplace_back(std::thread([this, candidate]() mutable {
+		weak_ptr<IceTransport> weakIceTransport{mIceTransport};
+		std::thread t([weakIceTransport, candidate]() mutable {
 			if (candidate.resolve(Candidate::ResolveMode::Lookup))
-				mIceTransport->addRemoteCandidate(candidate);
-		}));
+				if (auto iceTransport = weakIceTransport.lock())
+					iceTransport->addRemoteCandidate(candidate);
+		});
+		t.detach();
 	}
 }