Properly clean up RtpVideoSender.

Bug: webrtc:9517
Change-Id: I625c132907bd178f62c8b99f4b2407c75aa7e947
Reviewed-on: https://webrtc-review.googlesource.com/89382
Reviewed-by: Björn Terelius <terelius@webrtc.org>
Commit-Queue: Stefan Holmer <stefan@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24022}
diff --git a/call/rtp_transport_controller_send.cc b/call/rtp_transport_controller_send.cc
index 10b39e5..ed01815 100644
--- a/call/rtp_transport_controller_send.cc
+++ b/call/rtp_transport_controller_send.cc
@@ -84,7 +84,7 @@
   process_thread_->DeRegisterModule(&pacer_);
 }
 
-PayloadRouter* RtpTransportControllerSend::CreateVideoRtpSender(
+VideoRtpSenderInterface* RtpTransportControllerSend::CreateVideoRtpSender(
     const std::vector<uint32_t>& ssrcs,
     std::map<uint32_t, RtpState> suspended_ssrcs,
     const std::map<uint32_t, RtpPayloadState>& states,
@@ -102,6 +102,19 @@
   return video_rtp_senders_.back().get();
 }
 
+void RtpTransportControllerSend::DestroyVideoRtpSender(
+    VideoRtpSenderInterface* rtp_video_sender) {
+  std::vector<std::unique_ptr<VideoRtpSenderInterface>>::iterator it =
+      video_rtp_senders_.end();
+  for (it = video_rtp_senders_.begin(); it != video_rtp_senders_.end(); ++it) {
+    if (it->get() == rtp_video_sender) {
+      break;
+    }
+  }
+  RTC_DCHECK(it != video_rtp_senders_.end());
+  video_rtp_senders_.erase(it);
+}
+
 void RtpTransportControllerSend::OnNetworkChanged(uint32_t bitrate_bps,
                                                   uint8_t fraction_loss,
                                                   int64_t rtt_ms,
diff --git a/call/rtp_transport_controller_send.h b/call/rtp_transport_controller_send.h
index ce7ee1e..f120ce0 100644
--- a/call/rtp_transport_controller_send.h
+++ b/call/rtp_transport_controller_send.h
@@ -46,7 +46,7 @@
       const BitrateConstraints& bitrate_config);
   ~RtpTransportControllerSend() override;
 
-  PayloadRouter* CreateVideoRtpSender(
+  VideoRtpSenderInterface* CreateVideoRtpSender(
       const std::vector<uint32_t>& ssrcs,
       std::map<uint32_t, RtpState> suspended_ssrcs,
       const std::map<uint32_t, RtpPayloadState>&
@@ -56,6 +56,8 @@
       Transport* send_transport,
       const RtpSenderObservers& observers,
       RtcEventLog* event_log) override;
+  void DestroyVideoRtpSender(
+      VideoRtpSenderInterface* rtp_video_sender) override;
 
   // Implements NetworkChangedObserver interface.
   void OnNetworkChanged(uint32_t bitrate_bps,
@@ -103,7 +105,7 @@
  private:
   const Clock* const clock_;
   PacketRouter packet_router_;
-  std::vector<std::unique_ptr<PayloadRouter>> video_rtp_senders_;
+  std::vector<std::unique_ptr<VideoRtpSenderInterface>> video_rtp_senders_;
   PacedSender pacer_;
   RtpKeepAliveConfig keepalive_;
   RtpBitrateConfigurator bitrate_configurator_;
diff --git a/call/rtp_transport_controller_send_interface.h b/call/rtp_transport_controller_send_interface.h
index e954b02..b9e84ae 100644
--- a/call/rtp_transport_controller_send_interface.h
+++ b/call/rtp_transport_controller_send_interface.h
@@ -100,6 +100,8 @@
       Transport* send_transport,
       const RtpSenderObservers& observers,
       RtcEventLog* event_log) = 0;
+  virtual void DestroyVideoRtpSender(
+      VideoRtpSenderInterface* rtp_video_sender) = 0;
 
   virtual TransportFeedbackObserver* transport_feedback_observer() = 0;
 
diff --git a/call/test/mock_rtp_transport_controller_send.h b/call/test/mock_rtp_transport_controller_send.h
index d184e69..1939c1e 100644
--- a/call/test/mock_rtp_transport_controller_send.h
+++ b/call/test/mock_rtp_transport_controller_send.h
@@ -39,6 +39,7 @@
                                Transport*,
                                const RtpSenderObservers&,
                                RtcEventLog*));
+  MOCK_METHOD1(DestroyVideoRtpSender, void(VideoRtpSenderInterface*));
   MOCK_METHOD0(GetWorkerQueue, rtc::TaskQueue*());
   MOCK_METHOD0(packet_router, PacketRouter*());
   MOCK_METHOD0(transport_feedback_observer, TransportFeedbackObserver*());
diff --git a/video/video_send_stream_impl.cc b/video/video_send_stream_impl.cc
index 13461c6..303dc54 100644
--- a/video/video_send_stream_impl.cc
+++ b/video/video_send_stream_impl.cc
@@ -341,6 +341,7 @@
   if (fec_controller_->UseLossVectorMask()) {
     transport_->DeRegisterPacketFeedbackObserver(this);
   }
+  transport_->DestroyVideoRtpSender(payload_router_);
 }
 
 void VideoSendStreamImpl::RegisterProcessThread(