In RtcpTransceiver functions with callback avoid relying on PostTaskAndReply
deprecated version guarantees (using PostTaskAndReply) callback task will run on the task queue,
and thus doesn't guarantee to run it if task queue is destroyed,
new callback versions instead guarantee callback will always run,
but may run off the task queue if task queue is destroyed.
Both keep guarantee observer callbacks will not run after on_destroyed/on_removed is called.
Bug: None
Change-Id: I61bf52127f3084c0186aa8bc89037bf9296801d8
Reviewed-on: https://webrtc-review.googlesource.com/c/107305
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Reviewed-by: Niels Moller <nisse@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#25301}
diff --git a/modules/rtp_rtcp/source/rtcp_transceiver_unittest.cc b/modules/rtp_rtcp/source/rtcp_transceiver_unittest.cc
index 2ea5bc9..aaaf922 100644
--- a/modules/rtp_rtcp/source/rtcp_transceiver_unittest.cc
+++ b/modules/rtp_rtcp/source/rtcp_transceiver_unittest.cc
@@ -166,12 +166,11 @@
rtcp_transceiver.AddMediaReceiverRtcpObserver(kRemoteSsrc, observer.get());
rtcp_transceiver.ReceivePacket(CreateSenderReport(kRemoteSsrc, 1));
- rtcp_transceiver.RemoveMediaReceiverRtcpObserver(
- kRemoteSsrc, observer.get(),
- /*on_removed=*/rtc::NewClosure([&] {
- observer.reset();
- observer_deleted.Set();
- }));
+ rtcp_transceiver.RemoveMediaReceiverRtcpObserver(kRemoteSsrc, observer.get(),
+ /*on_removed=*/[&] {
+ observer.reset();
+ observer_deleted.Set();
+ });
rtcp_transceiver.ReceivePacket(CreateSenderReport(kRemoteSsrc, 2));
EXPECT_TRUE(observer_deleted.Wait(kTimeoutMs));
@@ -192,12 +191,11 @@
rtc::Event queue_blocker(false, false);
rtc::Event observer_deleted(false, false);
queue.PostTask([&] { EXPECT_TRUE(queue_blocker.Wait(kTimeoutMs)); });
- rtcp_transceiver.RemoveMediaReceiverRtcpObserver(
- kRemoteSsrc, observer.get(),
- /*on_removed=*/rtc::NewClosure([&] {
- observer.reset();
- observer_deleted.Set();
- }));
+ rtcp_transceiver.RemoveMediaReceiverRtcpObserver(kRemoteSsrc, observer.get(),
+ /*on_removed=*/[&] {
+ observer.reset();
+ observer_deleted.Set();
+ });
EXPECT_THAT(observer, Not(IsNull()));
queue_blocker.Set();
@@ -244,10 +242,10 @@
auto rtcp_transceiver = absl::make_unique<RtcpTransceiver>(config);
rtc::Event done(false, false);
rtcp_transceiver->SendCompoundPacket();
- rtcp_transceiver->Stop(rtc::NewClosure([&] {
+ rtcp_transceiver->Stop([&] {
EXPECT_CALL(outgoing_transport, SendRtcp).Times(0);
done.Set();
- }));
+ });
rtcp_transceiver = nullptr;
EXPECT_TRUE(done.Wait(kTimeoutMs));
}