From bd0ca90952c95aeface9dcb4219d746f24f4601d Mon Sep 17 00:00:00 2001 From: reuk Date: Wed, 20 Oct 2021 20:27:58 +0100 Subject: [PATCH] Linux: Release X lock when unregistering file descriptor in order to avoid deadlocks --- .../native/x11/juce_linux_XWindowSystem.cpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/modules/juce_gui_basics/native/x11/juce_linux_XWindowSystem.cpp b/modules/juce_gui_basics/native/x11/juce_linux_XWindowSystem.cpp index e113c53a66..d1d7674170 100644 --- a/modules/juce_gui_basics/native/x11/juce_linux_XWindowSystem.cpp +++ b/modules/juce_gui_basics/native/x11/juce_linux_XWindowSystem.cpp @@ -3198,17 +3198,22 @@ void XWindowSystem::destroyXDisplay() { jassert (display != nullptr); - XWindowSystemUtilities::ScopedXLock xLock; + { + XWindowSystemUtilities::ScopedXLock xLock; - X11Symbols::getInstance()->xDestroyWindow (display, juce_messageWindowHandle); - juce_messageWindowHandle = 0; - X11Symbols::getInstance()->xSync (display, True); + X11Symbols::getInstance()->xDestroyWindow (display, juce_messageWindowHandle); + juce_messageWindowHandle = 0; + X11Symbols::getInstance()->xSync (display, True); + } LinuxEventLoop::unregisterFdCallback (X11Symbols::getInstance()->xConnectionNumber (display)); - X11Symbols::getInstance()->xCloseDisplay (display); - display = nullptr; - displayVisuals = nullptr; + { + XWindowSystemUtilities::ScopedXLock xLock; + X11Symbols::getInstance()->xCloseDisplay (display); + display = nullptr; + displayVisuals = nullptr; + } } }