diff --git a/p2p/base/ice_transport_internal.h b/p2p/base/ice_transport_internal.h index eb21596612..d80dc99d1e 100644 --- a/p2p/base/ice_transport_internal.h +++ b/p2p/base/ice_transport_internal.h @@ -310,8 +310,12 @@ class RTC_EXPORT IceTransportInternal : public rtc::PacketTransportInternal { sigslot::signal2 SignalCandidateGathered; - sigslot::signal2 - SignalCandidateError; + void SetCandidateErrorCallback( + absl::AnyInvocable callback) { + RTC_DCHECK(!candidate_error_callback_); + candidate_error_callback_ = std::move(callback); + } sigslot::signal2 SignalCandidatesRemoved; @@ -372,6 +376,9 @@ class RTC_EXPORT IceTransportInternal : public rtc::PacketTransportInternal { dictionary_view_updated_callback_list_; webrtc::CallbackList dictionary_writer_synced_callback_list_; + + absl::AnyInvocable + candidate_error_callback_; }; } // namespace cricket diff --git a/p2p/base/p2p_transport_channel.cc b/p2p/base/p2p_transport_channel.cc index 5ddab77de3..cb097c3d59 100644 --- a/p2p/base/p2p_transport_channel.cc +++ b/p2p/base/p2p_transport_channel.cc @@ -996,7 +996,9 @@ void P2PTransportChannel::OnCandidateError( PortAllocatorSession* session, const IceCandidateErrorEvent& event) { RTC_DCHECK(network_thread_ == rtc::Thread::Current()); - SignalCandidateError(this, event); + if (candidate_error_callback_) { + candidate_error_callback_(this, event); + } } void P2PTransportChannel::OnCandidatesAllocationDone( diff --git a/pc/jsep_transport_controller.cc b/pc/jsep_transport_controller.cc index 2a701cce7f..a710cff45c 100644 --- a/pc/jsep_transport_controller.cc +++ b/pc/jsep_transport_controller.cc @@ -437,8 +437,12 @@ JsepTransportController::CreateDtlsTransport( this, &JsepTransportController::OnTransportGatheringState_n); dtls->ice_transport()->SignalCandidateGathered.connect( this, &JsepTransportController::OnTransportCandidateGathered_n); - dtls->ice_transport()->SignalCandidateError.connect( - this, &JsepTransportController::OnTransportCandidateError_n); + dtls->ice_transport()->SetCandidateErrorCallback( + [this](cricket::IceTransportInternal* transport, + const cricket::IceCandidateErrorEvent& error) { + RTC_DCHECK_RUN_ON(network_thread_); + OnTransportCandidateError_n(transport, error); + }); dtls->ice_transport()->SignalCandidatesRemoved.connect( this, &JsepTransportController::OnTransportCandidatesRemoved_n); dtls->ice_transport()->SignalRoleConflict.connect(