summaryrefslogtreecommitdiffstats
path: root/chromium/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.cc
diff options
context:
space:
mode:
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.cc10
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();