Details
-
Task
-
Resolution: Done
-
P1: Critical
-
None
-
6.0
-
None
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)