From 00a8839d47c53914cde58f7ff26aa1e1ee4128e3 Mon Sep 17 00:00:00 2001 From: Jakob Ivarsson Date: Tue, 23 Apr 2024 15:03:29 +0200 Subject: [PATCH] Allow source tracker to be called synchronously on a single thread. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug: None Change-Id: I699c0c787d28fe79959e93b3e1eda2634c931cef Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/348840 Reviewed-by: Danil Chapovalov Commit-Queue: Jakob Ivarsson‎ Cr-Commit-Position: refs/heads/main@{#42154} --- modules/rtp_rtcp/source/source_tracker.cc | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/modules/rtp_rtcp/source/source_tracker.cc b/modules/rtp_rtcp/source/source_tracker.cc index 51e8f1cd38..cd881f1443 100644 --- a/modules/rtp_rtcp/source/source_tracker.cc +++ b/modules/rtp_rtcp/source/source_tracker.cc @@ -29,12 +29,17 @@ void SourceTracker::OnFrameDelivered(RtpPacketInfos packet_infos) { } Timestamp now = clock_->CurrentTime(); - worker_thread_->PostTask( - SafeTask(worker_safety_.flag(), - [this, packet_infos = std::move(packet_infos), now]() { - RTC_DCHECK_RUN_ON(worker_thread_); - OnFrameDeliveredInternal(now, packet_infos); - })); + if (worker_thread_->IsCurrent()) { + RTC_DCHECK_RUN_ON(worker_thread_); + OnFrameDeliveredInternal(now, packet_infos); + } else { + worker_thread_->PostTask( + SafeTask(worker_safety_.flag(), + [this, packet_infos = std::move(packet_infos), now]() { + RTC_DCHECK_RUN_ON(worker_thread_); + OnFrameDeliveredInternal(now, packet_infos); + })); + } } void SourceTracker::OnFrameDeliveredInternal(