Avoid deallocating the async invoker when clearing the transport.
Deallocating the async invoker is a costly operation but it's also unnecessary and could cause us to miss signal events. The data_channel_transport and data_channel_transport_invoker are (despite the name) not related, since the latter is used to signal events on the signaling thread whereas the former deals with the data. Bug: webrtc:11908 Change-Id: I37b345476a6381aef5d87807877ec1e05b380137 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/184062 Reviewed-by: Harald Alvestrand <hta@webrtc.org> Commit-Queue: Tommi <tommi@webrtc.org> Cr-Commit-Position: refs/heads/master@{#32096}
This commit is contained in:
parent
8452ea86c5
commit
6da271844c
@ -129,7 +129,7 @@ void DataChannelController::OnDataReceived(
|
||||
cricket::ReceiveDataParams params;
|
||||
params.sid = channel_id;
|
||||
params.type = ToCricketDataMessageType(type);
|
||||
data_channel_transport_invoker_->AsyncInvoke<void>(
|
||||
data_channel_transport_invoker_.AsyncInvoke<void>(
|
||||
RTC_FROM_HERE, signaling_thread(), [this, params, buffer] {
|
||||
RTC_DCHECK_RUN_ON(signaling_thread());
|
||||
// TODO(bugs.webrtc.org/11547): The data being received should be
|
||||
@ -148,7 +148,7 @@ void DataChannelController::OnDataReceived(
|
||||
|
||||
void DataChannelController::OnChannelClosing(int channel_id) {
|
||||
RTC_DCHECK_RUN_ON(network_thread());
|
||||
data_channel_transport_invoker_->AsyncInvoke<void>(
|
||||
data_channel_transport_invoker_.AsyncInvoke<void>(
|
||||
RTC_FROM_HERE, signaling_thread(), [this, channel_id] {
|
||||
RTC_DCHECK_RUN_ON(signaling_thread());
|
||||
SignalDataChannelTransportChannelClosing_s(channel_id);
|
||||
@ -157,7 +157,7 @@ void DataChannelController::OnChannelClosing(int channel_id) {
|
||||
|
||||
void DataChannelController::OnChannelClosed(int channel_id) {
|
||||
RTC_DCHECK_RUN_ON(network_thread());
|
||||
data_channel_transport_invoker_->AsyncInvoke<void>(
|
||||
data_channel_transport_invoker_.AsyncInvoke<void>(
|
||||
RTC_FROM_HERE, signaling_thread(), [this, channel_id] {
|
||||
RTC_DCHECK_RUN_ON(signaling_thread());
|
||||
SignalDataChannelTransportChannelClosed_s(channel_id);
|
||||
@ -166,7 +166,7 @@ void DataChannelController::OnChannelClosed(int channel_id) {
|
||||
|
||||
void DataChannelController::OnReadyToSend() {
|
||||
RTC_DCHECK_RUN_ON(network_thread());
|
||||
data_channel_transport_invoker_->AsyncInvoke<void>(
|
||||
data_channel_transport_invoker_.AsyncInvoke<void>(
|
||||
RTC_FROM_HERE, signaling_thread(), [this] {
|
||||
RTC_DCHECK_RUN_ON(signaling_thread());
|
||||
data_channel_transport_ready_to_send_ = true;
|
||||
@ -177,7 +177,7 @@ void DataChannelController::OnReadyToSend() {
|
||||
|
||||
void DataChannelController::OnTransportClosed() {
|
||||
RTC_DCHECK_RUN_ON(network_thread());
|
||||
data_channel_transport_invoker_->AsyncInvoke<void>(
|
||||
data_channel_transport_invoker_.AsyncInvoke<void>(
|
||||
RTC_FROM_HERE, signaling_thread(), [this] {
|
||||
RTC_DCHECK_RUN_ON(signaling_thread());
|
||||
OnTransportChannelClosed();
|
||||
@ -186,7 +186,6 @@ void DataChannelController::OnTransportClosed() {
|
||||
|
||||
void DataChannelController::SetupDataChannelTransport_n() {
|
||||
RTC_DCHECK_RUN_ON(network_thread());
|
||||
data_channel_transport_invoker_ = std::make_unique<rtc::AsyncInvoker>();
|
||||
|
||||
// There's a new data channel transport. This needs to be signaled to the
|
||||
// |sctp_data_channels_| so that they can reopen and reconnect. This is
|
||||
@ -196,7 +195,6 @@ void DataChannelController::SetupDataChannelTransport_n() {
|
||||
|
||||
void DataChannelController::TeardownDataChannelTransport_n() {
|
||||
RTC_DCHECK_RUN_ON(network_thread());
|
||||
data_channel_transport_invoker_ = nullptr;
|
||||
if (data_channel_transport()) {
|
||||
data_channel_transport()->SetDataSink(nullptr);
|
||||
}
|
||||
@ -592,7 +590,7 @@ bool DataChannelController::DataChannelSendData(
|
||||
|
||||
void DataChannelController::NotifyDataChannelsOfTransportCreated() {
|
||||
RTC_DCHECK_RUN_ON(network_thread());
|
||||
data_channel_transport_invoker_->AsyncInvoke<void>(
|
||||
data_channel_transport_invoker_.AsyncInvoke<void>(
|
||||
RTC_FROM_HERE, signaling_thread(), [this] {
|
||||
RTC_DCHECK_RUN_ON(signaling_thread());
|
||||
for (const auto& channel : sctp_data_channels_) {
|
||||
|
||||
@ -221,8 +221,9 @@ class DataChannelController : public RtpDataChannelProviderInterface,
|
||||
sigslot::signal1<SctpDataChannel*> SignalSctpDataChannelCreated_
|
||||
RTC_GUARDED_BY(signaling_thread());
|
||||
|
||||
// Used to invoke data channel transport signals on the signaling thread.
|
||||
std::unique_ptr<rtc::AsyncInvoker> data_channel_transport_invoker_
|
||||
// Used from the network thread to invoke data channel transport signals on
|
||||
// the signaling thread.
|
||||
rtc::AsyncInvoker data_channel_transport_invoker_
|
||||
RTC_GUARDED_BY(network_thread());
|
||||
|
||||
// Owning PeerConnection.
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user