Bug 1365291 - capture 'this' with RefPtr on dispatch to STS thread. r=jib draft
authorMichael Froman <mfroman@mozilla.com>
Tue, 16 May 2017 16:07:33 -0500
changeset 579627 55c8b14f63020feda57accd2b4b331de708866c4
parent 578817 b2b2746d51ea149bff83ea3e97efdff05bdd9a92
child 629063 efbeccd7bbf04bec46b4f132bb72f1e30debd04a
push id59312
push userbmo:mfroman@nostrum.com
push dateWed, 17 May 2017 15:10:41 +0000
reviewersjib
bugs1365291
milestone55.0a1
Bug 1365291 - capture 'this' with RefPtr on dispatch to STS thread. r=jib - Avoid any potential for this going away from underneath the dispatch to STS thread. - Added notes in PeerConnectionImpl on the test-only nature of the AddRIDExtension, AddRIDFilter, and GetMediaPipelineForTrack methods. PeerConnectionImpl::GetMediaPipelineForTrack by returning a reference to the RefPtr instead of a copy. MozReview-Commit-ID: EwMr9ulKtm8
media/webrtc/signaling/src/mediapipeline/MediaPipeline.cpp
media/webrtc/signaling/src/peerconnection/PeerConnectionImpl.h
--- a/media/webrtc/signaling/src/mediapipeline/MediaPipeline.cpp
+++ b/media/webrtc/signaling/src/mediapipeline/MediaPipeline.cpp
@@ -734,34 +734,34 @@ MediaPipeline::UpdateTransport_s(int lev
     filter_ = filter;
   }
 }
 
 void
 MediaPipeline::AddRIDExtension_m(size_t extension_id)
 {
   RUN_ON_THREAD(sts_thread_,
-                WrapRunnable(this,
+                WrapRunnable(RefPtr<MediaPipeline>(this),
                              &MediaPipeline::AddRIDExtension_s,
                              extension_id),
                 NS_DISPATCH_NORMAL);
 }
 
 void
 MediaPipeline::AddRIDExtension_s(size_t extension_id)
 {
   rtp_parser_->RegisterRtpHeaderExtension(webrtc::kRtpExtensionRtpStreamId,
                                           extension_id);
 }
 
 void
 MediaPipeline::AddRIDFilter_m(const std::string& rid)
 {
   RUN_ON_THREAD(sts_thread_,
-                WrapRunnable(this,
+                WrapRunnable(RefPtr<MediaPipeline>(this),
                              &MediaPipeline::AddRIDFilter_s,
                              rid),
                 NS_DISPATCH_NORMAL);
 }
 
 void
 MediaPipeline::AddRIDFilter_s(const std::string& rid)
 {
--- a/media/webrtc/signaling/src/peerconnection/PeerConnectionImpl.h
+++ b/media/webrtc/signaling/src/peerconnection/PeerConnectionImpl.h
@@ -445,23 +445,25 @@ public:
   nsresult
   SetParameters(dom::MediaStreamTrack& aTrack,
                 const std::vector<JsepTrack::JsConstraints>& aConstraints);
 
   nsresult
   GetParameters(dom::MediaStreamTrack& aTrack,
                 std::vector<JsepTrack::JsConstraints>* aOutConstraints);
 
+  // test-only: called from simulcast mochitests.
   NS_IMETHODIMP_TO_ERRORRESULT(AddRIDExtension, ErrorResult &rv,
                                dom::MediaStreamTrack& aRecvTrack,
                                unsigned short aExtensionId)
   {
     rv = AddRIDExtension(aRecvTrack, aExtensionId);
   }
 
+  // test-only: called from simulcast mochitests.
   NS_IMETHODIMP_TO_ERRORRESULT(AddRIDFilter, ErrorResult& rv,
                                dom::MediaStreamTrack& aRecvTrack,
                                const nsAString& aRid)
   {
     rv = AddRIDFilter(aRecvTrack, aRid);
   }
 
   nsresult GetPeerIdentity(nsAString& peerIdentity)
@@ -653,16 +655,18 @@ private:
   }
   bool CheckThreadInt() const {
     bool on;
     NS_ENSURE_SUCCESS(mThread->IsOnCurrentThread(&on), false);
     NS_ENSURE_TRUE(on, false);
     return true;
   }
 
+  // test-only: called from AddRIDExtension and AddRIDFilter
+  // for simulcast mochitests.
   RefPtr<MediaPipeline> GetMediaPipelineForTrack(
       dom::MediaStreamTrack& aRecvTrack);
 
   nsresult GetTimeSinceEpoch(DOMHighResTimeStamp *result);
 
   // Shut down media - called on main thread only
   void ShutdownMedia();