Bug 1506884 - Use DeleteStreams in AudioConduit; r=padenot

This makes the shutdown behaviour of AudioConduit consistent with
VideoConduit which should make the conduit code easier to read and
reason about.

Differential Revision: https://phabricator.services.mozilla.com/D25055

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Dan Minor 2019-03-27 16:54:52 +00:00
Родитель 41dd6b09aa
Коммит 2bafcb3c9a
5 изменённых файлов: 37 добавлений и 7 удалений

Просмотреть файл

@ -78,6 +78,8 @@ class AudioConduitTest : public ::testing::Test {
mAudioConduit->Init();
}
~AudioConduitTest() { mAudioConduit->DeleteStreams(); }
MockCall* mCall;
RefPtr<AudioConduitWithMockChannelProxy> mAudioConduit;
};

Просмотреть файл

@ -274,7 +274,20 @@ class WebrtcMediaTransport : public mozilla::TransportInterface {
public:
WebrtcMediaTransport() : numPkts(0), mAudio(false), mVideo(false) {}
~WebrtcMediaTransport() {}
~WebrtcMediaTransport() {
if (mAudioSession) {
mAudioSession->DeleteStreams();
}
if (mOtherAudioSession) {
mOtherAudioSession->DeleteStreams();
}
if (mVideoSession) {
mVideoSession->DeleteStreams();
}
if (mOtherVideoSession) {
mOtherVideoSession->DeleteStreams();
}
}
virtual nsresult SendRtpPacket(const uint8_t* data, size_t len) {
++numPkts;

Просмотреть файл

@ -267,8 +267,15 @@ class TestAgent {
void Shutdown_s() { transport_->Shutdown(); }
void Shutdown() {
if (audio_pipeline_) audio_pipeline_->Shutdown_m();
if (audio_stream_track_) audio_stream_track_->Stop();
if (audio_pipeline_) {
audio_pipeline_->Shutdown_m();
}
if (audio_stream_track_) {
audio_stream_track_->Stop();
}
if (audio_conduit_) {
audio_conduit_->DeleteStreams();
}
mozilla::SyncRunnable::DispatchToThread(
test_utils->sts_target(), WrapRunnable(this, &TestAgent::Shutdown_s));

Просмотреть файл

@ -75,15 +75,15 @@ WebrtcAudioConduit::~WebrtcAudioConduit() {
MOZ_ASSERT(NS_IsMainThread());
MutexAutoLock lock(mMutex);
DeleteSendStream();
DeleteRecvStream();
DeleteChannels();
// We don't Terminate() the VoEBase here, because the Call (owned by
// PeerConnectionMedia) actually owns the (shared) VoEBase/VoiceEngine
// here
mPtrVoEBase = nullptr;
MOZ_ASSERT(!mSendStream && !mRecvStream,
"Call DeleteStreams prior to ~WebrtcAudioConduit.");
}
bool WebrtcAudioConduit::SetLocalSSRCs(
@ -1034,6 +1034,14 @@ MediaConduitErrorCode WebrtcAudioConduit::DeliverPacket(const void* data,
return kMediaConduitNoError;
}
void WebrtcAudioConduit::DeleteStreams() {
MOZ_ASSERT(NS_IsMainThread());
MutexAutoLock lock(mMutex);
DeleteSendStream();
DeleteRecvStream();
}
MediaConduitErrorCode WebrtcAudioConduit::CreateChannels() {
MOZ_ASSERT(NS_IsMainThread());

Просмотреть файл

@ -170,7 +170,7 @@ class WebrtcAudioConduit : public AudioSessionConduit,
void SetPCHandle(const std::string& aPCHandle) override {}
MediaConduitErrorCode DeliverPacket(const void* data, int len) override;
void DeleteStreams() override {}
void DeleteStreams() override;
WebrtcAudioConduit(RefPtr<WebRtcCallWrapper> aCall,
nsCOMPtr<nsIEventTarget> aStsThread)