Bug 1295352 - Release MediaEngineTabVideoSource main-thread-only members on main thread. r?jesup
MozReview-Commit-ID: H3N70b9tGiI
--- a/dom/media/webrtc/MediaEngineTabVideoSource.cpp
+++ b/dom/media/webrtc/MediaEngineTabVideoSource.cpp
@@ -114,16 +114,27 @@ MediaEngineTabVideoSource::InitRunnable:
mVideoSource->mWindow = nsPIDOMWindowOuter::From(win);
MOZ_ASSERT(mVideoSource->mWindow);
}
nsCOMPtr<nsIRunnable> start(new StartRunnable(mVideoSource));
start->Run();
return NS_OK;
}
+nsresult
+MediaEngineTabVideoSource::DestroyRunnable::Run()
+{
+ MOZ_ASSERT(NS_IsMainThread());
+
+ mVideoSource->mWindow = nullptr;
+ mVideoSource->mTabSource = nullptr;
+
+ return NS_OK;
+}
+
void
MediaEngineTabVideoSource::GetName(nsAString_internal& aName) const
{
aName.AssignLiteral(u"&getUserMedia.videoSource.tabShare;");
}
void
MediaEngineTabVideoSource::GetUUID(nsACString_internal& aUuid) const
@@ -188,16 +199,18 @@ MediaEngineTabVideoSource::Restart(Alloc
}
return NS_OK;
}
nsresult
MediaEngineTabVideoSource::Deallocate(AllocationHandle* aHandle)
{
MOZ_ASSERT(!aHandle);
+ NS_DispatchToMainThread(do_AddRef(new DestroyRunnable(this)));
+
{
MonitorAutoLock mon(mMonitor);
mState = kReleased;
}
return NS_OK;
}
nsresult
--- a/dom/media/webrtc/MediaEngineTabVideoSource.h
+++ b/dom/media/webrtc/MediaEngineTabVideoSource.h
@@ -71,16 +71,23 @@ class MediaEngineTabVideoSource : public
class InitRunnable : public Runnable {
public:
explicit InitRunnable(MediaEngineTabVideoSource *videoSource) : mVideoSource(videoSource) {}
NS_IMETHOD Run();
RefPtr<MediaEngineTabVideoSource> mVideoSource;
};
+ class DestroyRunnable : public Runnable {
+ public:
+ explicit DestroyRunnable(MediaEngineTabVideoSource* videoSource) : mVideoSource(videoSource) {}
+ NS_IMETHOD Run();
+ RefPtr<MediaEngineTabVideoSource> mVideoSource;
+ };
+
protected:
~MediaEngineTabVideoSource() {}
private:
int32_t mBufWidthMax;
int32_t mBufHeightMax;
int64_t mWindowId;
bool mScrollWithPage;