Bug 1574004 - Ensure not to leak disposer if UI thread is shot down. r=snorp,agi

I've hit this in one of my try runs and looks trivial to fix.

The already_AddRefed destructor asserts when leaked.

We should just not allow to let it go out of scope without moving the pointer.

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

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Emilio Cobos Álvarez 2019-09-24 16:50:02 +00:00
parent 203fbcd6c8
commit a966f41d5c

View File

@ -428,6 +428,7 @@ class nsWindow::NPZCSupport final
using Base::DisposeNative;
void OnDetach(already_AddRefed<Runnable> aDisposer) {
RefPtr<Runnable> disposer = aDisposer;
// There are several considerations when shutting down NPZC. 1) The
// Gecko thread may destroy NPZC at any time when nsWindow closes. 2)
// There may be pending events on the Gecko thread when NPZC is
@ -468,7 +469,7 @@ class nsWindow::NPZCSupport final
uiThread->Dispatch(NS_NewRunnableFunction(
"NPZCSupport::OnDetach",
[npzc, disposer = RefPtr<Runnable>(aDisposer)] {
[npzc, disposer = std::move(disposer)] {
npzc->SetAttached(false);
disposer->Run();
}));
@ -852,6 +853,7 @@ class nsWindow::LayerViewSupport final
using Base::DisposeNative;
void OnDetach(already_AddRefed<Runnable> aDisposer) {
RefPtr<Runnable> disposer = aDisposer;
if (RefPtr<nsThread> uiThread = GetAndroidUiThread()) {
GeckoSession::Compositor::GlobalRef compositor(mCompositor);
if (!compositor) {
@ -860,7 +862,7 @@ class nsWindow::LayerViewSupport final
uiThread->Dispatch(NS_NewRunnableFunction(
"LayerViewSupport::OnDetach",
[compositor, disposer = RefPtr<Runnable>(aDisposer),
[compositor, disposer = std::move(disposer),
results = &mCapturePixelsResults, window = &mWindow] {
if (LockedWindowPtr lock{*window}) {
while (!results->empty()) {