[vlc-commits] [Git][videolan/vlc][master] qt: fix crash on X11 while quitting

Rémi Denis-Courmont (@Courmisch) gitlab at videolan.org
Sun Jun 19 17:13:50 UTC 2022



Rémi Denis-Courmont pushed to branch master at VideoLAN / VLC


Commits:
70655272 by Pierre Lamot at 2022-06-19T16:53:13+00:00
qt: fix crash on X11 while quitting

this seems to happen in some case where graphical effects are used (drop shadow
on the audio cover in the full player for instance)

- - - - -


1 changed file:

- modules/gui/qt/maininterface/compositor_x11_uisurface.cpp


Changes:

=====================================
modules/gui/qt/maininterface/compositor_x11_uisurface.cpp
=====================================
@@ -20,6 +20,7 @@
 #include <QQmlEngine>
 #include <QQuickWindow>
 #include <QQuickItem>
+#include <QOffscreenSurface>
 
 #include "compositor_x11_uisurface.hpp"
 
@@ -66,16 +67,31 @@ CompositorX11UISurface::CompositorX11UISurface(QWindow* window, QScreen* screen)
 
 CompositorX11UISurface::~CompositorX11UISurface()
 {
+    auto surface = new QOffscreenSurface();
+    surface->setFormat(m_context->format());
+    surface->create();
+
+    // Make sure the context is current while doing cleanup. Note that we use the
+    // offscreen surface here because passing 'this' at this point is not safe: the
+    // underlying platform window may already be destroyed. To avoid all the trouble, use
+    // another surface that is valid for sure.
+    m_context->makeCurrent(surface);
+
     if (m_rootItem)
         delete m_rootItem;
-    if (m_uiWindow)
-        delete m_uiWindow;
     if (m_uiRenderControl)
         delete m_uiRenderControl;
-    if (m_context)
-        delete m_context;
+    if (m_uiWindow)
+        delete m_uiWindow;
     if (m_qmlEngine)
         delete m_qmlEngine;
+
+    m_context->doneCurrent();
+
+    delete surface;
+    if (m_context)
+        delete m_context;
+
 }
 
 



View it on GitLab: https://code.videolan.org/videolan/vlc/-/commit/70655272927e57f41f261f03533c9935a4a1aa4f

-- 
View it on GitLab: https://code.videolan.org/videolan/vlc/-/commit/70655272927e57f41f261f03533c9935a4a1aa4f
You're receiving this email because of your account on code.videolan.org.


VideoLAN code repository instance


More information about the vlc-commits mailing list