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
--- 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();