diff options
Diffstat (limited to 'chromium/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.cc')
-rw-r--r-- | chromium/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.cc | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/chromium/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.cc b/chromium/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.cc index fd5dff1a56b..7ede07459f1 100644 --- a/chromium/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.cc +++ b/chromium/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.cc @@ -3521,8 +3521,14 @@ void RTCPeerConnection::CloseInternal() { if (sctp_transport_) { sctp_transport_->Close(); } - for (auto& dtls_transport_iter : dtls_transports_by_native_transport_) { - dtls_transport_iter.value->Close(); + // Since Close() can trigger JS-level callbacks, iterate over a copy + // of the transports list. + auto dtls_transports_copy = dtls_transports_by_native_transport_; + for (auto& dtls_transport_iter : dtls_transports_copy) { + // Since "value" is a WeakPtr, check if it's still valid. + if (dtls_transport_iter.value) { + dtls_transport_iter.value->Close(); + } } feature_handle_for_scheduler_.reset(); |