Source code

Revision control

Copy as Markdown

Other Tools

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
---
.../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 b49a6fead5..71777069f7 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 {
@@ -274,6 +275,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(