From 579e832a51e690f7064bb971ca0f22560e179dad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20Bostr=C3=B6m?= Date: Fri, 12 Feb 2016 16:30:04 +0100 Subject: [PATCH] Fix race on VCM protection callback. Removes protection-callback removal and makes ViEChannel outlive ViEEncoder to not have races between BitrateAllocator and VideoSendStream destruction. BUG= R=stefan@webrtc.org Review URL: https://codereview.webrtc.org/1696693002 . Cr-Commit-Position: refs/heads/master@{#11604} --- webrtc/video/video_send_stream.cc | 22 +++++++++------------- webrtc/video/video_send_stream.h | 4 ++-- 2 files changed, 11 insertions(+), 15 deletions(-) diff --git a/webrtc/video/video_send_stream.cc b/webrtc/video/video_send_stream.cc index 959508570d..fafb0223ae 100644 --- a/webrtc/video/video_send_stream.cc +++ b/webrtc/video/video_send_stream.cc @@ -174,15 +174,6 @@ VideoSendStream::VideoSendStream( this, config.post_encode_callback, &stats_proxy_), - vie_encoder_(num_cpu_cores, - module_process_thread_, - &stats_proxy_, - config.pre_encode_callback, - &overuse_detector_, - congestion_controller_->pacer(), - &payload_router_, - bitrate_allocator), - vcm_(vie_encoder_.vcm()), vie_channel_(config.send_transport, module_process_thread_, &payload_router_, @@ -198,6 +189,15 @@ VideoSendStream::VideoSendStream( config_.rtp.ssrcs.size(), true), vie_receiver_(vie_channel_.vie_receiver()), + vie_encoder_(num_cpu_cores, + module_process_thread_, + &stats_proxy_, + config.pre_encode_callback, + &overuse_detector_, + congestion_controller_->pacer(), + &payload_router_, + bitrate_allocator), + vcm_(vie_encoder_.vcm()), input_(&vie_encoder_, config_.local_renderer, &stats_proxy_, @@ -306,10 +306,6 @@ VideoSendStream::~VideoSendStream() { Stop(); module_process_thread_->DeRegisterModule(&overuse_detector_); - // Remove vcm_protection_callback (part of vie_channel_) before destroying - // ViEChannel. vcm_ is owned by ViEEncoder and the registered callback does - // not outlive it. - vcm_->RegisterProtectionCallback(nullptr); vie_channel_.RegisterSendFrameCountObserver(nullptr); vie_channel_.RegisterSendBitrateObserver(nullptr); vie_channel_.RegisterRtcpPacketTypeCounterObserver(nullptr); diff --git a/webrtc/video/video_send_stream.h b/webrtc/video/video_send_stream.h index faabd33360..77152f54d2 100644 --- a/webrtc/video/video_send_stream.h +++ b/webrtc/video/video_send_stream.h @@ -94,11 +94,11 @@ class VideoSendStream : public webrtc::VideoSendStream, OveruseFrameDetector overuse_detector_; PayloadRouter payload_router_; - ViEEncoder vie_encoder_; - VideoCodingModule* const vcm_; EncoderStateFeedback encoder_feedback_; ViEChannel vie_channel_; ViEReceiver* const vie_receiver_; + ViEEncoder vie_encoder_; + VideoCodingModule* const vcm_; VideoCaptureInput input_; }; } // namespace internal