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 <danilchap@webrtc.org>
Reviewed-by: Sebastian Jansson <srte@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#27015}
This commit is contained in:
Danil Chapovalov
2019-03-07 11:15:14 +01:00
committed by Commit Bot
parent dc62ae432d
commit 6318f13295
4 changed files with 13 additions and 9 deletions

View File

@ -22,7 +22,10 @@
namespace webrtc { namespace webrtc {
namespace { namespace {
struct Destructor { struct Destructor {
void operator()() { rtcp_transceiver = nullptr; } void operator()() {
rtcp_transceiver->StopPeriodicTask();
rtcp_transceiver = nullptr;
}
std::unique_ptr<RtcpTransceiverImpl> rtcp_transceiver; std::unique_ptr<RtcpTransceiverImpl> rtcp_transceiver;
}; };
} // namespace } // namespace

View File

@ -97,13 +97,7 @@ RtcpTransceiverImpl::RtcpTransceiverImpl(const RtcpTransceiverConfig& config)
} }
} }
RtcpTransceiverImpl::~RtcpTransceiverImpl() { RtcpTransceiverImpl::~RtcpTransceiverImpl() = default;
// 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();
}
}
void RtcpTransceiverImpl::AddMediaReceiverRtcpObserver( void RtcpTransceiverImpl::AddMediaReceiverRtcpObserver(
uint32_t remote_ssrc, uint32_t remote_ssrc,

View File

@ -39,6 +39,8 @@ class RtcpTransceiverImpl {
RtcpTransceiverImpl& operator=(const RtcpTransceiverImpl&) = delete; RtcpTransceiverImpl& operator=(const RtcpTransceiverImpl&) = delete;
~RtcpTransceiverImpl(); ~RtcpTransceiverImpl();
void StopPeriodicTask() { periodic_task_handle_.Stop(); }
void AddMediaReceiverRtcpObserver(uint32_t remote_ssrc, void AddMediaReceiverRtcpObserver(uint32_t remote_ssrc,
MediaReceiverRtcpObserver* observer); MediaReceiverRtcpObserver* observer);
void RemoveMediaReceiverRtcpObserver(uint32_t remote_ssrc, void RemoveMediaReceiverRtcpObserver(uint32_t remote_ssrc,

View File

@ -136,7 +136,7 @@ RtcpTransceiverConfig DefaultTestConfig() {
return config; return config;
} }
TEST(RtcpTransceiverImplTest, CanDestroyOnTaskQueue) { TEST(RtcpTransceiverImplTest, NeedToStopPeriodicTaskToDestroyOnTaskQueue) {
FakeRtcpTransport transport; FakeRtcpTransport transport;
rtc::TaskQueue queue("rtcp"); rtc::TaskQueue queue("rtcp");
RtcpTransceiverConfig config = DefaultTestConfig(); RtcpTransceiverConfig config = DefaultTestConfig();
@ -149,6 +149,7 @@ TEST(RtcpTransceiverImplTest, CanDestroyOnTaskQueue) {
rtc::Event done; rtc::Event done;
queue.PostTask([rtcp_transceiver, &done] { queue.PostTask([rtcp_transceiver, &done] {
rtcp_transceiver->StopPeriodicTask();
delete rtcp_transceiver; delete rtcp_transceiver;
done.Set(); done.Set();
}); });
@ -188,6 +189,7 @@ TEST(RtcpTransceiverImplTest, DelaysSendingFirstCompondPacket) {
// Cleanup. // Cleanup.
rtc::Event done; rtc::Event done;
queue.PostTask([&] { queue.PostTask([&] {
rtcp_transceiver->StopPeriodicTask();
rtcp_transceiver.reset(); rtcp_transceiver.reset();
done.Set(); done.Set();
}); });
@ -221,6 +223,7 @@ TEST(RtcpTransceiverImplTest, PeriodicallySendsPackets) {
// Cleanup. // Cleanup.
rtc::Event done; rtc::Event done;
queue.PostTask([&] { queue.PostTask([&] {
rtcp_transceiver->StopPeriodicTask();
rtcp_transceiver.reset(); rtcp_transceiver.reset();
done.Set(); done.Set();
}); });
@ -266,6 +269,7 @@ TEST(RtcpTransceiverImplTest, SendCompoundPacketDelaysPeriodicSendPackets) {
// Cleanup. // Cleanup.
rtc::Event done; rtc::Event done;
queue.PostTask([&] { queue.PostTask([&] {
rtcp_transceiver->StopPeriodicTask();
rtcp_transceiver.reset(); rtcp_transceiver.reset();
done.Set(); done.Set();
}); });
@ -330,6 +334,7 @@ TEST(RtcpTransceiverImplTest, SendsPeriodicRtcpWhenNetworkStateIsUp) {
// Cleanup. // Cleanup.
rtc::Event done; rtc::Event done;
queue.PostTask([&] { queue.PostTask([&] {
rtcp_transceiver->StopPeriodicTask();
rtcp_transceiver.reset(); rtcp_transceiver.reset();
done.Set(); done.Set();
}); });