Issue #1558 - Prevent null deref crash in WebrtcVideoConduit DTOR

This commit is contained in:
Fedor 2020-05-27 09:01:53 +03:00 • committed by Roy Tam
commit 086a028a16

View file

@ -521,6 +521,8 @@ WebrtcVideoConduit::DeleteStreams()
mVideoCodecStat->EndOfCallStats(); mVideoCodecStat->EndOfCallStats();
} }
mVideoCodecStat = nullptr; mVideoCodecStat = nullptr;
//This does Release AudioConduit before mPtrViEBase set nullptr.
SyncTo(nullptr);
// We can't delete the VideoEngine until all these are released! // We can't delete the VideoEngine until all these are released!
// And we can't use a Scoped ptr, since the order is arbitrary // And we can't use a Scoped ptr, since the order is arbitrary
mPtrViEBase = nullptr; mPtrViEBase = nullptr;
@ -543,6 +545,11 @@ WebrtcVideoConduit::SyncTo(WebrtcAudioConduit *aConduit)
{ {
CSFLogDebug(logTag, "%s Synced to %p", __FUNCTION__, aConduit); CSFLogDebug(logTag, "%s Synced to %p", __FUNCTION__, aConduit);
if (!mPtrViEBase) {
// ViEBase has already been released; we no longer have a conduit.
mSyncedTo = nullptr;
return;
}
// SyncTo(value) syncs to the AudioConduit, and if already synced replaces // SyncTo(value) syncs to the AudioConduit, and if already synced replaces
// the current sync target. SyncTo(nullptr) cancels any existing sync and // the current sync target. SyncTo(nullptr) cancels any existing sync and
// releases the strong ref to AudioConduit. // releases the strong ref to AudioConduit.