Index: ui/views/widget/desktop_aura/desktop_root_window_host_x11.cc |
diff --git a/ui/views/widget/desktop_aura/desktop_root_window_host_x11.cc b/ui/views/widget/desktop_aura/desktop_root_window_host_x11.cc |
index 71d690f918eccbe2b3b23f909b9f6516d8085537..5b1c88866007860e7ad910d866a170dd799211ac 100644 |
--- a/ui/views/widget/desktop_aura/desktop_root_window_host_x11.cc |
+++ b/ui/views/widget/desktop_aura/desktop_root_window_host_x11.cc |
@@ -142,7 +142,6 @@ DesktopWindowTreeHostX11::DesktopWindowTreeHostX11( |
} |
DesktopWindowTreeHostX11::~DesktopWindowTreeHostX11() { |
- DestroyCompositor(); |
root_window_->window()->ClearProperty(kHostForRootWindow); |
aura::client::SetWindowMoveClient(root_window_->window(), NULL); |
desktop_native_widget_aura_->OnDesktopWindowTreeHostDestroyed(root_window_); |
@@ -320,6 +319,11 @@ void DesktopWindowTreeHostX11::CloseNow() { |
desktop_native_widget_aura_->root_window_event_filter()->RemoveHandler( |
x11_window_event_filter_.get()); |
+ // Destroy the compositor before destroying the |xwindow_| since shutdown |
+ // may try to swap, and the swap without a window causes an X error, which |
+ // causes a crash with in-process renderer. |
+ DestroyCompositor(); |
+ |
open_windows().remove(xwindow_); |
// Actually free our native resources. |
base::MessagePumpX11::Current()->RemoveDispatcherForWindow(xwindow_); |