Upstream commit: https://webrtc.googlesource.com/src/+/7e3a9ce99d832687d1eef3eaa270754970a761b0 Rely on TaskQueueBase interface in modules/rtp_rtcp Instead of requiring Thread to be passed to the RtpVideoStreamReceiverFrameTransformerDelegate. This class already uses it only though the TaskQueueBase interface. In tests rely on RunLoop helper when test makes calls that are required to be done on the same task queue, and rely on TaskQueueForTests where test does not make such calls. Bug: webrtc:42225410 Change-Id: I7aba5c696436d8ce43c85ccba5b9448e852ea81d Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/470880 Auto-Submit: Danil Chapovalov <danilchap@webrtc.org> Commit-Queue: Erik Språng <sprang@webrtc.org> Reviewed-by: Erik Språng <sprang@webrtc.org> Cr-Commit-Position: refs/heads/main@{#47662}
39 lines
1.6 KiB
Diff
39 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 c54f9f8991..a52f16077a 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 {
|
|
@@ -282,6 +283,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.
|
|
+ Event flush;
|
|
+ transformation_queue_->PostTask([this, &flush]() {
|
|
+ RTC_DCHECK_RUN_ON(transformation_queue_.get());
|
|
+ flush.Set();
|
|
+ });
|
|
+ flush.Wait(Event::kForever);
|
|
}
|
|
|
|
std::unique_ptr<TransformableVideoFrameInterface> CloneSenderVideoFrame(
|