author | Randell Jesup <rjesup@jesup.org> |
Wed, 17 Aug 2016 16:31:56 -0400 | |
changeset 310034 | f09e0ebac665c1bb2c411c85797f349fd95b22f1 |
parent 310033 | 1cb4f99e5d56091ca6adb7bef16af15a41451b46 |
child 310035 | f77d344cf887dea34adeceb220271cf953622d6e |
push id | 30576 |
push user | ryanvm@gmail.com |
push date | Fri, 19 Aug 2016 13:53:39 +0000 |
treeherder | mozilla-central@74f332c38a69 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | pehrsons |
bugs | 1293976 |
milestone | 51.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/dom/media/MediaStreamGraph.cpp +++ b/dom/media/MediaStreamGraph.cpp @@ -975,17 +975,17 @@ MediaStreamGraphImpl::OpenAudioInputImpl nsresult MediaStreamGraphImpl::OpenAudioInput(int aID, AudioDataListener *aListener) { // So, so, so annoying. Can't AppendMessage except on Mainthread if (!NS_IsMainThread()) { NS_DispatchToMainThread(WrapRunnable(this, &MediaStreamGraphImpl::OpenAudioInput, - aID, aListener)); + aID, RefPtr<AudioDataListener>(aListener))); return NS_OK; } class Message : public ControlMessage { public: Message(MediaStreamGraphImpl *aGraph, int aID, AudioDataListener *aListener) : ControlMessage(nullptr), mGraph(aGraph), mID(aID), mListener(aListener) {} virtual void Run() @@ -1044,17 +1044,17 @@ MediaStreamGraphImpl::CloseAudioInputImp void MediaStreamGraphImpl::CloseAudioInput(AudioDataListener *aListener) { // So, so, so annoying. Can't AppendMessage except on Mainthread if (!NS_IsMainThread()) { NS_DispatchToMainThread(WrapRunnable(this, &MediaStreamGraphImpl::CloseAudioInput, - aListener)); + RefPtr<AudioDataListener>(aListener))); return; } class Message : public ControlMessage { public: Message(MediaStreamGraphImpl *aGraph, AudioDataListener *aListener) : ControlMessage(nullptr), mGraph(aGraph), mListener(aListener) {} virtual void Run() {
--- a/dom/media/MediaStreamGraph.h +++ b/dom/media/MediaStreamGraph.h @@ -1367,17 +1367,16 @@ protected: /** * Sample rate at which this graph runs. For real time graphs, this is * the rate of the audio mixer. For offline graphs, this is the rate specified * at construction. */ TrackRate mSampleRate; /** - * Lifetime is controlled by OpenAudioInput/CloseAudioInput. Destroying the listener - * without removing it is an error; callers should assert on that. + * CloseAudioInput is async, so hold a reference here. */ - nsTArray<AudioDataListener *> mAudioInputs; + nsTArray<RefPtr<AudioDataListener>> mAudioInputs; }; } // namespace mozilla #endif /* MOZILLA_MEDIASTREAMGRAPH_H_ */
--- a/dom/media/webrtc/MediaEngineWebRTC.h +++ b/dom/media/webrtc/MediaEngineWebRTC.h @@ -393,16 +393,17 @@ public: { MutexAutoLock lock(mMutex); if (mAudioSource) { mAudioSource->NotifyInputData(aGraph, aBuffer, aFrames, aRate, aChannels); } } virtual void DeviceChanged() override { + MutexAutoLock lock(mMutex); if (mAudioSource) { mAudioSource->DeviceChanged(); } } void Shutdown() { MutexAutoLock lock(mMutex);