From 6318f13295bdfda89e05189f2dc4e1da99197f4a Mon Sep 17 00:00:00 2001 From: Danil Chapovalov Date: Thu, 7 Mar 2019 11:15:14 +0100 Subject: [PATCH] Stop using rtc::TaskQueue::Current in RtcpTransceiver Bug: webrtc:10191 Change-Id: Ifc080021ebcb203ea72beba8846e940a0c382dd1 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/126120 Commit-Queue: Danil Chapovalov Reviewed-by: Sebastian Jansson Cr-Commit-Position: refs/heads/master@{#27015} --- modules/rtp_rtcp/source/rtcp_transceiver.cc | 5 ++++- modules/rtp_rtcp/source/rtcp_transceiver_impl.cc | 8 +------- modules/rtp_rtcp/source/rtcp_transceiver_impl.h | 2 ++ modules/rtp_rtcp/source/rtcp_transceiver_impl_unittest.cc | 7 ++++++- 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/modules/rtp_rtcp/source/rtcp_transceiver.cc b/modules/rtp_rtcp/source/rtcp_transceiver.cc index cec6da9f3b..cca32055a1 100644 --- a/modules/rtp_rtcp/source/rtcp_transceiver.cc +++ b/modules/rtp_rtcp/source/rtcp_transceiver.cc @@ -22,7 +22,10 @@ namespace webrtc { namespace { struct Destructor { - void operator()() { rtcp_transceiver = nullptr; } + void operator()() { + rtcp_transceiver->StopPeriodicTask(); + rtcp_transceiver = nullptr; + } std::unique_ptr rtcp_transceiver; }; } // namespace diff --git a/modules/rtp_rtcp/source/rtcp_transceiver_impl.cc b/modules/rtp_rtcp/source/rtcp_transceiver_impl.cc index c6f8931075..dd895ad295 100644 --- a/modules/rtp_rtcp/source/rtcp_transceiver_impl.cc +++ b/modules/rtp_rtcp/source/rtcp_transceiver_impl.cc @@ -97,13 +97,7 @@ RtcpTransceiverImpl::RtcpTransceiverImpl(const RtcpTransceiverConfig& config) } } -RtcpTransceiverImpl::~RtcpTransceiverImpl() { - // If RtcpTransceiverImpl is destroyed off task queue, assume it is destroyed - // after TaskQueue. In that case there is no need to Cancel periodic task. - if (config_.task_queue == rtc::TaskQueue::Current()) { - periodic_task_handle_.Stop(); - } -} +RtcpTransceiverImpl::~RtcpTransceiverImpl() = default; void RtcpTransceiverImpl::AddMediaReceiverRtcpObserver( uint32_t remote_ssrc, diff --git a/modules/rtp_rtcp/source/rtcp_transceiver_impl.h b/modules/rtp_rtcp/source/rtcp_transceiver_impl.h index b08dd56b8b..083f77e379 100644 --- a/modules/rtp_rtcp/source/rtcp_transceiver_impl.h +++ b/modules/rtp_rtcp/source/rtcp_transceiver_impl.h @@ -39,6 +39,8 @@ class RtcpTransceiverImpl { RtcpTransceiverImpl& operator=(const RtcpTransceiverImpl&) = delete; ~RtcpTransceiverImpl(); + void StopPeriodicTask() { periodic_task_handle_.Stop(); } + void AddMediaReceiverRtcpObserver(uint32_t remote_ssrc, MediaReceiverRtcpObserver* observer); void RemoveMediaReceiverRtcpObserver(uint32_t remote_ssrc, diff --git a/modules/rtp_rtcp/source/rtcp_transceiver_impl_unittest.cc b/modules/rtp_rtcp/source/rtcp_transceiver_impl_unittest.cc index fec2bb770f..4f0d08eff2 100644 --- a/modules/rtp_rtcp/source/rtcp_transceiver_impl_unittest.cc +++ b/modules/rtp_rtcp/source/rtcp_transceiver_impl_unittest.cc @@ -136,7 +136,7 @@ RtcpTransceiverConfig DefaultTestConfig() { return config; } -TEST(RtcpTransceiverImplTest, CanDestroyOnTaskQueue) { +TEST(RtcpTransceiverImplTest, NeedToStopPeriodicTaskToDestroyOnTaskQueue) { FakeRtcpTransport transport; rtc::TaskQueue queue("rtcp"); RtcpTransceiverConfig config = DefaultTestConfig(); @@ -149,6 +149,7 @@ TEST(RtcpTransceiverImplTest, CanDestroyOnTaskQueue) { rtc::Event done; queue.PostTask([rtcp_transceiver, &done] { + rtcp_transceiver->StopPeriodicTask(); delete rtcp_transceiver; done.Set(); }); @@ -188,6 +189,7 @@ TEST(RtcpTransceiverImplTest, DelaysSendingFirstCompondPacket) { // Cleanup. rtc::Event done; queue.PostTask([&] { + rtcp_transceiver->StopPeriodicTask(); rtcp_transceiver.reset(); done.Set(); }); @@ -221,6 +223,7 @@ TEST(RtcpTransceiverImplTest, PeriodicallySendsPackets) { // Cleanup. rtc::Event done; queue.PostTask([&] { + rtcp_transceiver->StopPeriodicTask(); rtcp_transceiver.reset(); done.Set(); }); @@ -266,6 +269,7 @@ TEST(RtcpTransceiverImplTest, SendCompoundPacketDelaysPeriodicSendPackets) { // Cleanup. rtc::Event done; queue.PostTask([&] { + rtcp_transceiver->StopPeriodicTask(); rtcp_transceiver.reset(); done.Set(); }); @@ -330,6 +334,7 @@ TEST(RtcpTransceiverImplTest, SendsPeriodicRtcpWhenNetworkStateIsUp) { // Cleanup. rtc::Event done; queue.PostTask([&] { + rtcp_transceiver->StopPeriodicTask(); rtcp_transceiver.reset(); done.Set(); });