38 lines
1.6 KiB
Diff
38 lines
1.6 KiB
Diff
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 86c69f7861..fd76cde157 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
|
|
@@ -34,6 +34,7 @@
|
|
#include "api/video_codecs/video_codec.h"
|
|
#include "modules/rtp_rtcp/source/rtp_video_header.h"
|
|
#include "rtc_base/checks.h"
|
|
+#include "rtc_base/event.h"
|
|
#include "rtc_base/synchronization/mutex.h"
|
|
|
|
namespace webrtc {
|
|
@@ -287,6 +288,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(
|