summaryrefslogtreecommitdiffstats
path: root/third_party/libwebrtc/moz-patch-stack/0088.patch
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/libwebrtc/moz-patch-stack/0088.patch')
-rw-r--r--third_party/libwebrtc/moz-patch-stack/0088.patch38
1 files changed, 38 insertions, 0 deletions
diff --git a/third_party/libwebrtc/moz-patch-stack/0088.patch b/third_party/libwebrtc/moz-patch-stack/0088.patch
new file mode 100644
index 0000000000..d969596186
--- /dev/null
+++ b/third_party/libwebrtc/moz-patch-stack/0088.patch
@@ -0,0 +1,38 @@
+From: Byron Campen <docfaraday@gmail.com>
+Date: Thu, 20 Jul 2023 14:24:00 +0000
+Subject: Bug 1838080: Ensure that last ref to transformation_queue_ is not
+ released on itself. r=pehrsons,webrtc-reviewers
+
+Differential Revision: https://phabricator.services.mozilla.com/D181699
+Mercurial Revision: https://hg.mozilla.org/mozilla-central/rev/91d9e8b6a5c430a73561ffd2330865f04fcb1a6d
+---
+ .../rtp_sender_video_frame_transformer_delegate.cc | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+diff --git a/modules/rtp_rtcp/source/rtp_sender_video_frame_transformer_delegate.cc b/modules/rtp_rtcp/source/rtp_sender_video_frame_transformer_delegate.cc
+index f24c91ae35..9d7c58d19a 100644
+--- a/modules/rtp_rtcp/source/rtp_sender_video_frame_transformer_delegate.cc
++++ b/modules/rtp_rtcp/source/rtp_sender_video_frame_transformer_delegate.cc
+@@ -18,6 +18,7 @@
+ #include "api/task_queue/task_queue_factory.h"
+ #include "modules/rtp_rtcp/source/rtp_descriptor_authentication.h"
+ #include "rtc_base/checks.h"
++#include "rtc_base/event.h"
+
+ namespace webrtc {
+ namespace {
+@@ -232,6 +233,14 @@ void RTPSenderVideoFrameTransformerDelegate::Reset() {
+ MutexLock lock(&sender_lock_);
+ sender_ = nullptr;
+ }
++ // Wait until all pending tasks are executed, to ensure that the last ref
++ // standing is not on the transformation queue.
++ rtc::Event flush;
++ transformation_queue_->PostTask([this, &flush]() {
++ RTC_DCHECK_RUN_ON(transformation_queue_.get());
++ flush.Set();
++ });
++ flush.Wait(rtc::Event::kForever);
+ }
+
+ std::unique_ptr<TransformableVideoFrameInterface> CloneSenderVideoFrame(