зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1421965: Avoid nullptr crash when conduits cannot be created. r=drno
MozReview-Commit-ID: AdWiIbpFP0Y --HG-- extra : rebase_source : 5e2327f1ddf2249ba0f55c5dcbb4acdf49b65133
This commit is contained in:
Родитель
46f19d31a7
Коммит
184f4a9578
|
@ -1148,6 +1148,10 @@ PeerConnectionMedia::AddTransceiver(
|
||||||
aSendTrack,
|
aSendTrack,
|
||||||
mCall.get());
|
mCall.get());
|
||||||
|
|
||||||
|
if (!transceiver->IsValid()) {
|
||||||
|
return NS_ERROR_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
if (aSendTrack) {
|
if (aSendTrack) {
|
||||||
// implement checking for peerIdentity (where failure == black/silence)
|
// implement checking for peerIdentity (where failure == black/silence)
|
||||||
nsIDocument* doc = mParent->GetWindow()->GetExtantDoc();
|
nsIDocument* doc = mParent->GetWindow()->GetExtantDoc();
|
||||||
|
|
|
@ -56,6 +56,10 @@ TransceiverImpl::TransceiverImpl(
|
||||||
InitAudio();
|
InitAudio();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!IsValid()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
mConduit->SetPCHandle(mPCHandle);
|
mConduit->SetPCHandle(mPCHandle);
|
||||||
|
|
||||||
StartReceiveStream();
|
StartReceiveStream();
|
||||||
|
@ -78,6 +82,14 @@ TransceiverImpl::InitAudio()
|
||||||
{
|
{
|
||||||
mConduit = AudioSessionConduit::Create();
|
mConduit = AudioSessionConduit::Create();
|
||||||
|
|
||||||
|
if (!mConduit) {
|
||||||
|
MOZ_MTLOG(ML_ERROR, mPCHandle << "[" << mMid << "]: " << __FUNCTION__ <<
|
||||||
|
": Failed to create AudioSessionConduit");
|
||||||
|
// TODO(bug 1422897): We need a way to record this when it happens in the
|
||||||
|
// wild.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
mReceivePipeline = new MediaPipelineReceiveAudio(
|
mReceivePipeline = new MediaPipelineReceiveAudio(
|
||||||
mPCHandle,
|
mPCHandle,
|
||||||
mMainThread.get(),
|
mMainThread.get(),
|
||||||
|
@ -91,6 +103,14 @@ TransceiverImpl::InitVideo()
|
||||||
{
|
{
|
||||||
mConduit = VideoSessionConduit::Create(mCallWrapper);
|
mConduit = VideoSessionConduit::Create(mCallWrapper);
|
||||||
|
|
||||||
|
if (!mConduit) {
|
||||||
|
MOZ_MTLOG(ML_ERROR, mPCHandle << "[" << mMid << "]: " << __FUNCTION__ <<
|
||||||
|
": Failed to create VideoSessionConduit");
|
||||||
|
// TODO(bug 1422897): We need a way to record this when it happens in the
|
||||||
|
// wild.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
mReceivePipeline = new MediaPipelineReceiveVideo(
|
mReceivePipeline = new MediaPipelineReceiveVideo(
|
||||||
mPCHandle,
|
mPCHandle,
|
||||||
mMainThread.get(),
|
mMainThread.get(),
|
||||||
|
|
|
@ -59,6 +59,11 @@ public:
|
||||||
dom::MediaStreamTrack* aSendTrack,
|
dom::MediaStreamTrack* aSendTrack,
|
||||||
WebRtcCallWrapper* aCallWrapper);
|
WebRtcCallWrapper* aCallWrapper);
|
||||||
|
|
||||||
|
bool IsValid() const
|
||||||
|
{
|
||||||
|
return !!mConduit;
|
||||||
|
}
|
||||||
|
|
||||||
nsresult UpdateSendTrack(dom::MediaStreamTrack* aSendTrack);
|
nsresult UpdateSendTrack(dom::MediaStreamTrack* aSendTrack);
|
||||||
|
|
||||||
nsresult UpdateSinkIdentity(dom::MediaStreamTrack* aTrack,
|
nsresult UpdateSinkIdentity(dom::MediaStreamTrack* aTrack,
|
||||||
|
|
Загрузка…
Ссылка в новой задаче