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}
This commit is contained in:

committed by
Commit Bot

parent
b0ab2ce256
commit
98f5f6cdea
@ -46,6 +46,13 @@ void RtcpTransceiver::Stop(std::unique_ptr<rtc::QueuedTask> on_destroyed) {
|
||||
RTC_DCHECK(!rtcp_transceiver_);
|
||||
}
|
||||
|
||||
void RtcpTransceiver::Stop(std::function<void()> on_destroyed) {
|
||||
RTC_DCHECK(rtcp_transceiver_);
|
||||
task_queue_->PostTask(rtc::NewClosure(
|
||||
Destructor{std::move(rtcp_transceiver_)}, std::move(on_destroyed)));
|
||||
RTC_DCHECK(!rtcp_transceiver_);
|
||||
}
|
||||
|
||||
void RtcpTransceiver::AddMediaReceiverRtcpObserver(
|
||||
uint32_t remote_ssrc,
|
||||
MediaReceiverRtcpObserver* observer) {
|
||||
@ -68,6 +75,19 @@ void RtcpTransceiver::RemoveMediaReceiverRtcpObserver(
|
||||
task_queue_->PostTaskAndReply(std::move(remove), std::move(on_removed));
|
||||
}
|
||||
|
||||
void RtcpTransceiver::RemoveMediaReceiverRtcpObserver(
|
||||
uint32_t remote_ssrc,
|
||||
MediaReceiverRtcpObserver* observer,
|
||||
std::function<void()> on_removed) {
|
||||
RTC_CHECK(rtcp_transceiver_);
|
||||
RtcpTransceiverImpl* ptr = rtcp_transceiver_.get();
|
||||
auto remove = [ptr, remote_ssrc, observer] {
|
||||
ptr->RemoveMediaReceiverRtcpObserver(remote_ssrc, observer);
|
||||
};
|
||||
task_queue_->PostTask(
|
||||
rtc::NewClosure(std::move(remove), std::move(on_removed)));
|
||||
}
|
||||
|
||||
void RtcpTransceiver::SetReadyToSend(bool ready) {
|
||||
RTC_CHECK(rtcp_transceiver_);
|
||||
RtcpTransceiverImpl* ptr = rtcp_transceiver_.get();
|
||||
|
Reference in New Issue
Block a user