Browse Source

Replaced exception on transport emplace when closed by nullptr return

Paul-Louis Ageneau 3 years ago
parent
commit
a94b84cdaa
3 changed files with 7 additions and 2 deletions
  1. 4 1
      src/impl/peerconnection.cpp
  2. 1 1
      src/impl/websocket.cpp
  3. 2 0
      src/peerconnection.cpp

+ 4 - 1
src/impl/peerconnection.cpp

@@ -123,7 +123,7 @@ shared_ptr<T> emplaceTransport(PeerConnection *pc, shared_ptr<T> *member, shared
 	if (pc->state.load() == PeerConnection::State::Closed) {
 		std::atomic_store(member, decltype(transport)(nullptr));
 		transport->stop();
-		throw std::runtime_error("Connection is closed");
+		return nullptr;
 	}
 	return transport;
 }
@@ -933,6 +933,9 @@ void PeerConnection::processRemoteDescription(Description description) {
 	}
 
 	auto iceTransport = initIceTransport();
+	if (!iceTransport)
+		return; // closed
+
 	iceTransport->setRemoteDescription(std::move(description));
 
 	// Since we assumed passive role during DataChannel creation, we might need to shift the stream

+ 1 - 1
src/impl/websocket.cpp

@@ -183,7 +183,7 @@ shared_ptr<T> emplaceTransport(WebSocket *ws, shared_ptr<T> *member, shared_ptr<
 	if (ws->state.load() == WebSocket::State::Closed) {
 		std::atomic_store(member, decltype(transport)(nullptr));
 		transport->stop();
-		throw std::runtime_error("Connection is closed");
+		return nullptr;
 	}
 	return transport;
 }

+ 2 - 0
src/peerconnection.cpp

@@ -137,6 +137,8 @@ void PeerConnection::setLocalDescription(Description::Type type) {
 	}
 
 	auto iceTransport = impl()->initIceTransport();
+	if (!iceTransport)
+		return; // closed
 
 	Description local = iceTransport->getLocalDescription(type);
 	impl()->processLocalDescription(std::move(local));