[vlc-commits] [Git][videolan/vlc][master] 2 commits: qt: dcomp: fix assertion failure at start with `vlc://quit`
Steve Lhomme (@robUx4)
gitlab at videolan.org
Sat Jul 4 09:01:33 UTC 2026
Steve Lhomme pushed to branch master at VideoLAN / VLC
Commits:
9607e715 by Fatih Uzunoglu at 2026-07-04T08:51:18+00:00
qt: dcomp: fix assertion failure at start with `vlc://quit`
- - - - -
11f6b0a3 by Fatih Uzunoglu at 2026-07-04T08:51:18+00:00
qt: do not call `libvlc_Quit()` again if it was already called
- - - - -
3 changed files:
- modules/gui/qt/dialogs/dialogs_provider.cpp
- modules/gui/qt/maininterface/compositor_dcomp.cpp
- modules/gui/qt/maininterface/compositor_dcomp.hpp
Changes:
=====================================
modules/gui/qt/dialogs/dialogs_provider.cpp
=====================================
@@ -127,6 +127,8 @@ QVariant DialogsProvider::getTextDialog(QWidget *parent,
void DialogsProvider::quit()
{
+ if (b_isDying)
+ return;
b_isDying = true;
assert(qApp);
qApp->setProperty("isDying", true);
=====================================
modules/gui/qt/maininterface/compositor_dcomp.cpp
=====================================
@@ -180,8 +180,21 @@ bool CompositorDirectComposition::init()
return true;
}
-void CompositorDirectComposition::setup()
+bool CompositorDirectComposition::setup()
{
+ // WARNING: This lock is released explicitly as soon as we are ready to signal readiness:
+ QMutexLocker lock(&m_setupStateLock);
+
+ switch (m_setupState)
+ {
+ /* [[unlikely]] */ case SetupState::Fail:
+ return false;
+ /* [[unlikely]] */ case SetupState::Success:
+ return true; // Already called
+ /* [[likely]] */ default:
+ break;
+ }
+
//Setup shouldn't be called once we are shutting down
assert(m_mainCtx);
assert(m_quickView);
@@ -231,11 +244,9 @@ void CompositorDirectComposition::setup()
res = m_rootVisual->AddVisual(m_uiVisual, FALSE, NULL);
assert(res == S_OK);
- {
- QMutexLocker lock(&m_setupStateLock);
- m_setupState = SetupState::Success;
- m_setupStateCond.notify_all();
- }
+ m_setupState = SetupState::Success;
+ m_setupStateCond.notify_all();
+ lock.unlock();
m_dcompDevice->Commit();
@@ -259,6 +270,8 @@ void CompositorDirectComposition::setup()
}, Qt::QueuedConnection);
}
}
+
+ return true;
}
void CompositorDirectComposition::cleanup()
@@ -302,7 +315,14 @@ bool CompositorDirectComposition::makeMainInterface(MainCtx* mainCtx, std::funct
connect(quickViewPtr,
&QQuickWindow::frameSwapped, // At this stage, we can be sure that QRhi and QRhiSwapChain are valid.
this,
- &CompositorDirectComposition::setup,
+ [this]() {
+ if (!setup())
+ {
+ // Similar to `QQuickWindow::sceneGraphError()` handling:
+ if (m_mainCtx)
+ m_mainCtx->askToQuit();
+ }
+ },
Qt::SingleShotConnection);
{
@@ -410,7 +430,7 @@ void CompositorDirectComposition::unloadGUI()
QMutexLocker lock(&m_setupStateLock);
if (m_quickView) {
disconnect(m_quickView.get(), &QQuickWindow::frameSwapped,
- this, &CompositorDirectComposition::setup);
+ this, nullptr);
}
m_setupState = SetupState::Fail;
m_setupStateCond.notify_all();
=====================================
modules/gui/qt/maininterface/compositor_dcomp.hpp
=====================================
@@ -75,13 +75,14 @@ protected:
bool canDoCombinedSurfaceUpdates() const override { return true; };
void commitSurface() override;
+private:
+ [[nodiscard]] bool setup();
+ void cleanup();
+
private slots:
void onSurfacePositionChanged(const QPointF& position) override;
void onSurfaceSizeChanged(const QSizeF& size) override;
- void setup();
- void cleanup();
-
protected:
int windowEnable(const vlc_window_cfg_t *) override;
void windowDisable() override;
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/27cbfd3877be98698574825771b2af07f14c2f54...11f6b0a3b24b0b2b2edb726fdccedde2313a51d8
--
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/27cbfd3877be98698574825771b2af07f14c2f54...11f6b0a3b24b0b2b2edb726fdccedde2313a51d8
You're receiving this email because of your account on code.videolan.org. Manage all notifications: https://code.videolan.org/-/profile/notifications | Help: https://code.videolan.org/help
More information about the vlc-commits
mailing list