mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-19 16:25:38 +00:00
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:
parent
203fbcd6c8
commit
a966f41d5c
@ -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()) {
|
||||
|
Loading…
Reference in New Issue
Block a user