Replace WeakPtr with CancelablePeriodicTask in RtcpTransceiverImpl
This allow to destroy the RtcpTransceiverImpl off the task queue with assumption it is destroyed after task queue. i.e. it allows to post destruction of RtcpTransceiverImpl to the TaskQueue without waiting. BUG: webrtc:8239 Change-Id: I4bea7a6d2edc97061ebd00f2f275c1ab827bc3c5 Reviewed-on: https://webrtc-review.googlesource.com/97160 Commit-Queue: Danil Chapovalov <danilchap@webrtc.org> Reviewed-by: Per Kjellander <perkj@webrtc.org> Cr-Commit-Position: refs/heads/master@{#24574}
This commit is contained in:

committed by
Commit Bot

parent
cfbd26df1e
commit
1a6a4f3d62
@ -137,6 +137,40 @@ RtcpTransceiverConfig DefaultTestConfig() {
|
||||
return config;
|
||||
}
|
||||
|
||||
TEST(RtcpTransceiverImplTest, CanDestroyOnTaskQueue) {
|
||||
FakeRtcpTransport transport;
|
||||
rtc::TaskQueue queue("rtcp");
|
||||
RtcpTransceiverConfig config = DefaultTestConfig();
|
||||
config.task_queue = &queue;
|
||||
config.schedule_periodic_compound_packets = true;
|
||||
config.outgoing_transport = &transport;
|
||||
auto* rtcp_transceiver = new RtcpTransceiverImpl(config);
|
||||
// Wait for a periodic packet.
|
||||
EXPECT_TRUE(transport.WaitPacket());
|
||||
|
||||
rtc::Event done(false, false);
|
||||
queue.PostTask([rtcp_transceiver, &done] {
|
||||
delete rtcp_transceiver;
|
||||
done.Set();
|
||||
});
|
||||
ASSERT_TRUE(done.Wait(/*milliseconds=*/1000));
|
||||
}
|
||||
|
||||
TEST(RtcpTransceiverImplTest, CanDestroyAfterTaskQueue) {
|
||||
FakeRtcpTransport transport;
|
||||
auto* queue = new rtc::TaskQueue("rtcp");
|
||||
RtcpTransceiverConfig config = DefaultTestConfig();
|
||||
config.task_queue = queue;
|
||||
config.schedule_periodic_compound_packets = true;
|
||||
config.outgoing_transport = &transport;
|
||||
auto* rtcp_transceiver = new RtcpTransceiverImpl(config);
|
||||
// Wait for a periodic packet.
|
||||
EXPECT_TRUE(transport.WaitPacket());
|
||||
|
||||
delete queue;
|
||||
delete rtcp_transceiver;
|
||||
}
|
||||
|
||||
TEST(RtcpTransceiverImplTest, DelaysSendingFirstCompondPacket) {
|
||||
rtc::TaskQueue queue("rtcp");
|
||||
FakeRtcpTransport transport;
|
||||
@ -290,7 +324,7 @@ TEST(RtcpTransceiverImplTest, SendsPeriodicRtcpWhenNetworkStateIsUp) {
|
||||
absl::optional<RtcpTransceiverImpl> rtcp_transceiver;
|
||||
rtcp_transceiver.emplace(config);
|
||||
|
||||
rtcp_transceiver->SetReadyToSend(true);
|
||||
queue.PostTask([&] { rtcp_transceiver->SetReadyToSend(true); });
|
||||
|
||||
EXPECT_TRUE(transport.WaitPacket());
|
||||
|
||||
|
Reference in New Issue
Block a user