| Index: webrtc/video/video_receive_stream.cc | 
| diff --git a/webrtc/video/video_receive_stream.cc b/webrtc/video/video_receive_stream.cc | 
| index 2b4a3c2b7b0f131a662255a33af24f69dfc4c0aa..7d77751db3cd8c69c6d3b9f51f92ee96e69e9b3a 100644 | 
| --- a/webrtc/video/video_receive_stream.cc | 
| +++ b/webrtc/video/video_receive_stream.cc | 
| @@ -246,13 +246,6 @@ VideoReceiveStream::~VideoReceiveStream() { | 
| process_thread_->DeRegisterModule(&rtp_stream_sync_); | 
| process_thread_->DeRegisterModule(&video_receiver_); | 
|  | 
| -  // Deregister external decoders so they are no longer running during | 
| -  // destruction. This effectively stops the VCM since the decoder thread is | 
| -  // stopped, the VCM is deregistered and no asynchronous decoder threads are | 
| -  // running. | 
| -  for (const Decoder& decoder : config_.decoders) | 
| -    video_receiver_.RegisterExternalDecoder(nullptr, decoder.payload_type); | 
| - | 
| congestion_controller_->GetRemoteBitrateEstimator(UseSendSideBwe(config_)) | 
| ->RemoveStream(rtp_stream_receiver_.GetRemoteSsrc()); | 
| } | 
| @@ -307,7 +300,15 @@ void VideoReceiveStream::Stop() { | 
| // stop immediately, instead of waiting for a timeout. Needs to be called | 
| // before joining the decoder thread thread. | 
| video_receiver_.TriggerDecoderShutdown(); | 
| -  decode_thread_.Stop(); | 
| +  if (decode_thread_.IsRunning()) { | 
| +    decode_thread_.Stop(); | 
| +    // Deregister external decoders so they are no longer running during | 
| +    // destruction. This effectively stops the VCM since the decoder thread is | 
| +    // stopped, the VCM is deregistered and no asynchronous decoder threads are | 
| +    // running. | 
| +    for (const Decoder& decoder : config_.decoders) | 
| +      video_receiver_.RegisterExternalDecoder(nullptr, decoder.payload_type); | 
| +  } | 
| call_stats_->DeregisterStatsObserver(video_stream_decoder_.get()); | 
| video_stream_decoder_.reset(); | 
| incoming_video_stream_.reset(); | 
|  |