Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-84144

QQuickWidget crashes on shutdown with RHI

    XMLWordPrintable

Details

    • Task
    • Resolution: Done
    • P1: Critical
    • None
    • 6.0
    • Qt RHI
    • None
    • All

    Description

      Try running the QQuickWidget example "quickwidgets" with the OpenGL RHI backend. It will crash on shutdown with the following stack trace:

      0000007c`b59adef0 00007ff9`f9402ab6 Qt6Guid!QArrayDataPointer<QRhiGles2::DeferredReleaseEntry>::operator->(void)+0xe [c:\dev\qt5-dev\base\src\corelib\tools\qarraydatapointer.h @ 131]
      0000007c`b59adf20 00007ff9`f93f969c Qt6Guid!QVector<QRhiGles2::DeferredReleaseEntry>::size(void)+0x16 [c:\dev\qt5-dev\base\src\corelib\tools\qvector.h @ 187]
      0000007c`b59adf50 00007ff9`f93f9644 Qt6Guid!QVector<QRhiGles2::DeferredReleaseEntry>::append(struct QRhiGles2::DeferredReleaseEntry * i1 = 0x0000007c`b59ae0b0, struct QRhiGles2::DeferredReleaseEntry * i2 = 0x0000007c`b59ae0bc)+0x3c [c:\dev\qt5-dev\base\src\corelib\tools\qvector.h @ 545]
      0000007c`b59ae040 00007ff9`f93dc83b Qt6Guid!QVector<QRhiGles2::DeferredReleaseEntry>::append(struct QRhiGles2::DeferredReleaseEntry * t = 0x0000007c`b59ae0b0)+0x44 [c:\dev\qt5-dev\base\src\corelib\tools\qvector.h @ 243]
      0000007c`b59ae080 00007ff9`f93dc7a2 Qt6Guid!QGles2TextureRenderTarget::release(void)+0x7b [c:\dev\qt5-dev\base\src\gui\rhi\qrhigles2.cpp @ 3915]
      0000007c`b59ae0e0 00007ff9`f93f8807 Qt6Guid!QGles2TextureRenderTarget::~QGles2TextureRenderTarget(void)+0x22 [c:\dev\qt5-dev\base\src\gui\rhi\qrhigles2.cpp @ 3898]
      0000007c`b59ae110 00007ff9`faa048c4 Qt6Guid!QGles2TextureRenderTarget::`scalar deleting destructor'(void)+0x17
      0000007c`b59ae140 00007ff9`faa04f91 Qt6Quickd!QQuickWindowRenderTarget::reset(class QRhi * rhi = 0x00000270`2f131f10)+0x74 [c:\dev\qt5-dev\declarative\src\quick\items\qquickwindow.cpp @ 440]
      0000007c`b59ae1f0 00007ffa`50ffc124 Qt6Quickd!QQuickWindowPrivate::~QQuickWindowPrivate(void)+0x51 [c:\dev\qt5-dev\declarative\src\quick\items\qquickwindow.cpp @ 693]
      0000007c`b59ae260 00007ffa`51001067 Qt6QuickWidgetsd!QQuickOffcreenWindowPrivate::~QQuickOffcreenWindowPrivate(void)+0x14
      0000007c`b59ae290 00007ff9`f7a1c543 Qt6QuickWidgetsd!QQuickOffcreenWindowPrivate::`scalar deleting destructor'(void)+0x17
      0000007c`b59ae2c0 00007ff9`f7a1a5a9 Qt6Cored!QScopedPointerDeleter<QObjectData>::cleanup(class QObjectData * pointer = 0x00000270`2537cf00)+0x43 [c:\dev\qt5-dev\base\src\corelib\tools\qscopedpointer.h @ 60]
      0000007c`b59ae310 00007ff9`f7a052ca Qt6Cored!QScopedPointer<QObjectData,QScopedPointerDeleter<QObjectData> >::~QScopedPointer<QObjectData,QScopedPointerDeleter<QObjectData> >(void)+0x29 [c:\dev\qt5-dev\base\src\corelib\tools\qscopedpointer.h @ 107]
      0000007c`b59ae350 00007ff9`f8d0a8d8 Qt6Cored!QObject::~QObject(void)+0x71a [c:\dev\qt5-dev\base\src\corelib\kernel\qobject.cpp @ 1081]
      0000007c`b59ae4c0 00007ff9`fa9ffe60 Qt6Guid!QWindow::~QWindow(void)+0xc8 [c:\dev\qt5-dev\base\src\gui\kernel\qwindow.cpp @ 227]
      0000007c`b59ae510 00007ffa`510011f8 Qt6Quickd!QQuickWindow::~QQuickWindow(void)+0x330 [c:\dev\qt5-dev\declarative\src\quick\items\qquickwindow.cpp @ 1543]
      0000007c`b59ae5c0 00007ffa`50fed323 Qt6QuickWidgetsd!QQuickWindow::`scalar deleting destructor'(void)+0x18
      0000007c`b59ae5f0 00007ffa`51001157 Qt6QuickWidgetsd!QQuickWidgetPrivate::~QQuickWidgetPrivate(void)+0x263 [c:\dev\qt5-dev\declarative\src\quickwidgets\qquickwidget.cpp @ 241]
      0000007c`b59ae6f0 00007ff9`f7a1c543 Qt6QuickWidgetsd!QQuickWidgetPrivate::`scalar deleting destructor'(void)+0x17
      0000007c`b59ae720 00007ff9`f7a1a5a9 Qt6Cored!QScopedPointerDeleter<QObjectData>::cleanup(class QObjectData * pointer = 0x00000270`2537c2f0)+0x43 [c:\dev\qt5-dev\base\src\corelib\tools\qscopedpointer.h @ 60]
      0000007c`b59ae770 00007ff9`f7a052ca Qt6Cored!QScopedPointer<QObjectData,QScopedPointerDeleter<QObjectData> >::~QScopedPointer<QObjectData,QScopedPointerDeleter<QObjectData> >(void)+0x29 [c:\dev\qt5-dev\base\src\corelib\tools\qscopedpointer.h @ 107]
      0000007c`b59ae7b0 00007ff9`f9a6694d Qt6Cored!QObject::~QObject(void)+0x71a [c:\dev\qt5-dev\base\src\corelib\kernel\qobject.cpp @ 1081]
      0000007c`b59ae920 00007ffa`50fe93c0 Qt6Widgetsd!QWidget::~QWidget(void)+0x8fd [c:\dev\qt5-dev\base\src\widgets\kernel\qwidget.cpp @ 1555]
      0000007c`b59aeac0 00007ff6`d7f214d8 Qt6QuickWidgetsd!QQuickWidget::~QQuickWidget(void)+0xb0 [c:\dev\qt5-dev\declarative\src\quickwidgets\qquickwidget.cpp @ 587]
      0000007c`b59aeb20 00007ff9`f7a0c599 quickwidget!QQuickWidget::`scalar deleting destructor'(void)+0x18
      0000007c`b59aeb50 00007ff9`f9a66823 Qt6Cored!QObjectPrivate::deleteChildren(void)+0x109 [c:\dev\qt5-dev\base\src\corelib\kernel\qobject.cpp @ 2039]
      0000007c`b59aebc0 00007ff9`f9d60eaa Qt6Widgetsd!QWidget::~QWidget(void)+0x7d3 [c:\dev\qt5-dev\base\src\widgets\kernel\qwidget.cpp @ 1533]
      0000007c`b59aed60 00007ff9`f9d75866 Qt6Widgetsd!QMdiSubWindow::~QMdiSubWindow(void)+0x5a [c:\dev\qt5-dev\base\src\widgets\widgets\qmdisubwindow.cpp @ 2260]
      0000007c`b59aeda0 00007ff9`f7a0c599 Qt6Widgetsd!QMdiSubWindow::`vector deleting destructor'(void)+0x76
      0000007c`b59aedd0 00007ff9`f9a66823 Qt6Cored!QObjectPrivate::deleteChildren(void)+0x109 [c:\dev\qt5-dev\base\src\corelib\kernel\qobject.cpp @ 2039]
      0000007c`b59aee40 00007ff9`f9aa3436 Qt6Widgetsd!QWidget::~QWidget(void)+0x7d3 [c:\dev\qt5-dev\base\src\widgets\kernel\qwidget.cpp @ 1533]
      0000007c`b59aefe0 00007ff9`f7a0c599 Qt6Widgetsd!QWidget::`vector deleting destructor'(void)+0x76
      0000007c`b59af010 00007ff9`f9a66823 Qt6Cored!QObjectPrivate::deleteChildren(void)+0x109 [c:\dev\qt5-dev\base\src\corelib\kernel\qobject.cpp @ 2039]
      0000007c`b59af080 00007ff9`f9c37f72 Qt6Widgetsd!QWidget::~QWidget(void)+0x7d3 [c:\dev\qt5-dev\base\src\widgets\kernel\qwidget.cpp @ 1533]
      0000007c`b59af220 00007ff9`f9c3ad0d Qt6Widgetsd!QFrame::~QFrame(void)+0x32 [c:\dev\qt5-dev\base\src\widgets\widgets\qframe.cpp @ 264]
      0000007c`b59af250 00007ff9`f9d45046 Qt6Widgetsd!QAbstractScrollArea::~QAbstractScrollArea(void)+0x5d [c:\dev\qt5-dev\base\src\widgets\widgets\qabstractscrollarea.cpp @ 507]
      0000007c`b59af290 00007ff6`d7f21438 Qt6Widgetsd!QMdiArea::~QMdiArea(void)+0x1f6 [c:\dev\qt5-dev\base\src\widgets\widgets\qmdiarea.cpp @ 1729]
      0000007c`b59af350 00007ff9`f7a0c599 quickwidget!QMdiArea::`scalar deleting destructor'(void)+0x18
      0000007c`b59af380 00007ff9`f9a66823 Qt6Cored!QObjectPrivate::deleteChildren(void)+0x109 [c:\dev\qt5-dev\base\src\corelib\kernel\qobject.cpp @ 2039]
      0000007c`b59af3f0 00007ff9`f9d25062 Qt6Widgetsd!QWidget::~QWidget(void)+0x7d3 [c:\dev\qt5-dev\base\src\widgets\kernel\qwidget.cpp @ 1533]
      0000007c`b59af590 00007ff6`d7f1f874 Qt6Widgetsd!QMainWindow::~QMainWindow(void)+0x32 [c:\dev\qt5-dev\base\src\widgets\widgets\qmainwindow.cpp @ 378]
      0000007c`b59af5c0 00007ff6`d7f190d2 quickwidget!MainWindow::~MainWindow(void)+0x14
      0000007c`b59af5f0 00007ff6`d7f2b735 quickwidget!main(int argc = 0n1, char ** argv = 0x00000270`2531d360)+0x332 [c:\dev\qt5-dev\declarative\examples\quick\quickwidgets\quickwidget\main.cpp @ 223]
      0000007c`b59af7f0 00007ff6`d7f29ced quickwidget!WinMain(struct HINSTANCE__ * __formal = 0x00007ff6`d7f10000, struct HINSTANCE__ * __formal = 0x00000000`00000000, char * __formal = 0x00000270`25307f1d "", int __formal = 0n10)+0xf5 [c:\dev\qt5-dev\base\src\winmain\qtmain_win.cpp @ 97]
      0000007c`b59af870 00007ff6`d7f29bde quickwidget!invoke_main(void)+0x2d [d:\agent\_work\2\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl @ 107]
      0000007c`b59af8b0 00007ff6`d7f29a9e quickwidget!__scrt_common_main_seh(void)+0x12e [d:\agent\_work\2\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl @ 288]
      0000007c`b59af920 00007ff6`d7f29d79 quickwidget!__scrt_common_main(void)+0xe [d:\agent\_work\2\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl @ 331]
      0000007c`b59af950 00007ffa`61157bd4 quickwidget!WinMainCRTStartup(void)+0x9 [d:\agent\_work\2\s\src\vctools\crt\vcstartup\src\startup\exe_winmain.cpp @ 17]
      0000007c`b59af980 00007ffa`612ace51 KERNEL32!BaseThreadInitThunk+0x14
      0000007c`b59af9b0 00000000`00000000 ntdll!RtlUserThreadStart+0x2
      

      The reason is that the QQuickWindow and render control share a QRhi instance. This instance is deleted by the render control destructor (the QQuickWidget explicitly deletes this before anything else) and warns that we are leaking resources. The resources are later attempted to be deleted and we crash because the QRHI pointer is null.

      (tested on Windows)

      Attachments

        No reviews matched the request. Check your Options in the drop-down menu of this sections header.

        Activity

          People

            esabraha Eskil Abrahamsen Blomfeldt
            esabraha Eskil Abrahamsen Blomfeldt
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Gerrit Reviews

                There are no open Gerrit changes