diff --git a/engine/src/flutter/tools/debugger/debugger.cc b/engine/src/flutter/tools/debugger/debugger.cc index a764ae59571..4fdbbe88474 100644 --- a/engine/src/flutter/tools/debugger/debugger.cc +++ b/engine/src/flutter/tools/debugger/debugger.cc @@ -66,13 +66,11 @@ void SkyDebugger::OnEmbed( } void SkyDebugger::OnViewManagerDisconnected(mojo::ViewManager* view_manager) { - CHECK(false); // FIXME: This is dead code, why? view_manager_ = nullptr; root_ = nullptr; } void SkyDebugger::OnViewDestroyed(mojo::View* view) { - CHECK(false); // FIXME: This is dead code, why? view->RemoveObserver(this); } @@ -101,6 +99,16 @@ void SkyDebugger::NavigateToURL(const mojo::String& url) { } } +void SkyDebugger::Shutdown() { + // Make sure we shut down mojo before quitting the message loop or things + // like blink::shutdown() may try to talk to the message loop and crash. + window_manager_app_.reset(); + + // TODO(eseidel): This still hits an X11 error which I don't understand + // "X Error of failed request: GLXBadDrawable", crbug.com/430581 + mojo::ApplicationImpl::Terminate(); +} + void SkyDebugger::InjectInspector() { InspectorServicePtr inspector_service; mojo::ConnectToService(viewer_services_.get(), &inspector_service); diff --git a/engine/src/flutter/tools/debugger/debugger.h b/engine/src/flutter/tools/debugger/debugger.h index 4bd60db0681..e48a6280d7b 100644 --- a/engine/src/flutter/tools/debugger/debugger.h +++ b/engine/src/flutter/tools/debugger/debugger.h @@ -36,6 +36,7 @@ class SkyDebugger : public mojo::ApplicationDelegate, // Overridden from Debugger void NavigateToURL(const mojo::String& url) override; void InjectInspector() override; + void Shutdown() override; private: // Overridden from mojo::ApplicationDelegate: diff --git a/engine/src/flutter/tools/debugger/debugger.mojom b/engine/src/flutter/tools/debugger/debugger.mojom index 75e2f2f8a8a..8e5f23bc4e4 100644 --- a/engine/src/flutter/tools/debugger/debugger.mojom +++ b/engine/src/flutter/tools/debugger/debugger.mojom @@ -7,4 +7,5 @@ module sky; interface Debugger { NavigateToURL(string url); InjectInspector(); + Shutdown(); }; diff --git a/engine/src/flutter/tools/debugger/prompt/prompt.cc b/engine/src/flutter/tools/debugger/prompt/prompt.cc index b8007a78276..8a5ad048f5f 100644 --- a/engine/src/flutter/tools/debugger/prompt/prompt.cc +++ b/engine/src/flutter/tools/debugger/prompt/prompt.cc @@ -132,7 +132,7 @@ class Prompt : public mojo::ApplicationDelegate { void Quit() { std::cout << "quitting" << std::endl; - exit(0); + debugger_->Shutdown(); } void ToggleTracing() {