diff options
Diffstat (limited to 'third_party/libwebrtc/moz-patch-stack/0085.patch')
-rw-r--r-- | third_party/libwebrtc/moz-patch-stack/0085.patch | 89 |
1 files changed, 58 insertions, 31 deletions
diff --git a/third_party/libwebrtc/moz-patch-stack/0085.patch b/third_party/libwebrtc/moz-patch-stack/0085.patch index fe0fd9a95c..62d24fdc20 100644 --- a/third_party/libwebrtc/moz-patch-stack/0085.patch +++ b/third_party/libwebrtc/moz-patch-stack/0085.patch @@ -1,39 +1,66 @@ From: Byron Campen <docfaraday@gmail.com> Date: Thu, 20 Jul 2023 14:24:00 +0000 -Subject: Bug 1838080: Work around a race in - ChannelSendFrameTransformerDelegate. r=pehrsons,webrtc-reviewers +Subject: Bug 1838080: Use the current TaskQueue, instead of the current + thread, to init this. r=pehrsons,webrtc-reviewers -This variable can be null when a ChannelSendFrameTransformerDelegate is in use, -because that does an async dispatch to the encoder queue in the handling for -transformed frames. If this is unset while that dispatch is in flight, we -nullptr crash. +There are situations where the current thread is not set, but the current +TaskQueue is (but not vice versa). -Differential Revision: https://phabricator.services.mozilla.com/D180735 -Mercurial Revision: https://hg.mozilla.org/mozilla-central/rev/56555ecee7f36ae73abff1cbbd06807c2b65fc19 +Differential Revision: https://phabricator.services.mozilla.com/D180736 +Mercurial Revision: https://hg.mozilla.org/mozilla-central/rev/62e71a2f745c4b98d5ee7ce9e6386aa1b657be9b --- - audio/channel_send.cc | 8 ++++++-- - 1 file changed, 6 insertions(+), 2 deletions(-) + .../rtp_video_stream_receiver_frame_transformer_delegate.cc | 3 +-- + .../rtp_video_stream_receiver_frame_transformer_delegate.h | 5 ++--- + video/rtp_video_stream_receiver2.cc | 2 +- + 3 files changed, 4 insertions(+), 6 deletions(-) -diff --git a/audio/channel_send.cc b/audio/channel_send.cc -index 2b64569fdd..ee94760b6f 100644 ---- a/audio/channel_send.cc -+++ b/audio/channel_send.cc -@@ -281,12 +281,16 @@ class RtpPacketSenderProxy : public RtpPacketSender { - void EnqueuePackets( - std::vector<std::unique_ptr<RtpPacketToSend>> packets) override { - MutexLock lock(&mutex_); -- rtp_packet_pacer_->EnqueuePackets(std::move(packets)); -+ if (rtp_packet_pacer_) { -+ rtp_packet_pacer_->EnqueuePackets(std::move(packets)); -+ } - } +diff --git a/modules/rtp_rtcp/source/rtp_video_stream_receiver_frame_transformer_delegate.cc b/modules/rtp_rtcp/source/rtp_video_stream_receiver_frame_transformer_delegate.cc +index fbd10c4c7b..ad3aa86c79 100644 +--- a/modules/rtp_rtcp/source/rtp_video_stream_receiver_frame_transformer_delegate.cc ++++ b/modules/rtp_rtcp/source/rtp_video_stream_receiver_frame_transformer_delegate.cc +@@ -96,8 +96,7 @@ RtpVideoStreamReceiverFrameTransformerDelegate:: + RtpVideoFrameReceiver* receiver, + Clock* clock, + rtc::scoped_refptr<FrameTransformerInterface> frame_transformer, +- rtc::Thread* network_thread, +- uint32_t ssrc) ++ TaskQueueBase* network_thread, uint32_t ssrc) + : receiver_(receiver), + frame_transformer_(std::move(frame_transformer)), + network_thread_(network_thread), +diff --git a/modules/rtp_rtcp/source/rtp_video_stream_receiver_frame_transformer_delegate.h b/modules/rtp_rtcp/source/rtp_video_stream_receiver_frame_transformer_delegate.h +index f08fc692dd..02f2e53923 100644 +--- a/modules/rtp_rtcp/source/rtp_video_stream_receiver_frame_transformer_delegate.h ++++ b/modules/rtp_rtcp/source/rtp_video_stream_receiver_frame_transformer_delegate.h +@@ -41,8 +41,7 @@ class RtpVideoStreamReceiverFrameTransformerDelegate + RtpVideoFrameReceiver* receiver, + Clock* clock, + rtc::scoped_refptr<FrameTransformerInterface> frame_transformer, +- rtc::Thread* network_thread, +- uint32_t ssrc); ++ TaskQueueBase* network_thread, uint32_t ssrc); - void RemovePacketsForSsrc(uint32_t ssrc) override { - MutexLock lock(&mutex_); -- rtp_packet_pacer_->RemovePacketsForSsrc(ssrc); -+ if (rtp_packet_pacer_) { -+ rtp_packet_pacer_->RemovePacketsForSsrc(ssrc); -+ } + void Init(); + void Reset(); +@@ -71,7 +70,7 @@ class RtpVideoStreamReceiverFrameTransformerDelegate + RtpVideoFrameReceiver* receiver_ RTC_GUARDED_BY(network_sequence_checker_); + rtc::scoped_refptr<FrameTransformerInterface> frame_transformer_ + RTC_GUARDED_BY(network_sequence_checker_); +- rtc::Thread* const network_thread_; ++ TaskQueueBase* const network_thread_; + const uint32_t ssrc_; + Clock* const clock_; + bool short_circuit_ RTC_GUARDED_BY(network_sequence_checker_) = false; +diff --git a/video/rtp_video_stream_receiver2.cc b/video/rtp_video_stream_receiver2.cc +index db0b87c736..c4a021d6c0 100644 +--- a/video/rtp_video_stream_receiver2.cc ++++ b/video/rtp_video_stream_receiver2.cc +@@ -341,7 +341,7 @@ RtpVideoStreamReceiver2::RtpVideoStreamReceiver2( + if (frame_transformer) { + frame_transformer_delegate_ = + rtc::make_ref_counted<RtpVideoStreamReceiverFrameTransformerDelegate>( +- this, clock_, std::move(frame_transformer), rtc::Thread::Current(), ++ this, clock_, std::move(frame_transformer), TaskQueueBase::Current(), + config_.rtp.remote_ssrc); + frame_transformer_delegate_->Init(); } - - private: |