Details
-
Bug
-
Resolution: Unresolved
-
P1: Critical
-
None
-
5.4.1
-
None
Description
Our end users are finding it easy to crash our app just by scrolling our QML gridview on a Windows touchscreen. I have not reproduced it myself but we got a very revealing stack trace as follows. In the minidump, I can see that the QQuickWindowPrivate *d is null in QSGWindowsRenderLoop::renderWindow().
I theorize that this has a parallel root cause to QTBUG-49100: a delayed event is being propagated to a window that has already been destroyed by the housecleaning of the GridView. I suspect that we just need a simple null check in QSGWindowsRenderLoop::renderWindow(), but I admit to being puzzled why "d->isRenderable()" doesn't cause the crash first if my theory is right... Maybe it's optimized away??
Qt5Core.dll!QList<QItemSelectionRange>::length() Line 290 C++ Qt5Quick.dll!QQuickWindowPrivate::reallyDeliverTouchEvent(QTouchEvent * event) Line 1917 C++ Qt5Quick.dll!QQuickWindowPrivate::flushDelayedTouchEvent() Line 1861 C++ Qt5Quick.dll!QSGWindowsRenderLoop::renderWindow(QQuickWindow * window) Line 405 C++ Qt5Quick.dll!QSGWindowsRenderLoop::render() Line 358 C++ Qt5Quick.dll!QSGWindowsRenderLoop::event(QEvent * event) Line 340 C++ Qt5Widgets.dll!QApplicationPrivate::notify_helper(QObject * receiver, QEvent * e) Line 3723 C++ Qt5Widgets.dll!QApplication::notify(QObject * receiver, QEvent * e) Line 3685 C++ Qt5Core.dll!QCoreApplication::notifyInternal(QObject * receiver, QEvent * event) Line 935 C++ Qt5Core.dll!QEventDispatcherWin32Private::sendTimerEvent(int timerId) Line 618 C++ Qt5Core.dll!QEventDispatcherWin32::event(QEvent * e) Line 1196 C++ Qt5Widgets.dll!QApplicationPrivate::notify_helper(QObject * receiver, QEvent * e) Line 3723 C++ Qt5Widgets.dll!QApplication::notify(QObject * receiver, QEvent * e) Line 3685 C++ Qt5Core.dll!QCoreApplication::notifyInternal(QObject * receiver, QEvent * event) Line 935 C++ Qt5Core.dll!QCoreApplicationPrivate::sendPostedEvents(QObject * receiver, int event_type, QThreadData * data) Line 1552 C++ qwindows.dll!00007ffec2a61453() Unknown Qt5Core.dll!qt_internal_proc(HWND__ * hwnd, unsigned int message, unsigned __int64 wp, __int64 lp) Line 414 C++ user32.dll!UserCallWinProcCheckWow() Unknown user32.dll!DispatchMessageWorker() Unknown Qt5Core.dll!QEventDispatcherWin32::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 807 C++ qwindows.dll!00007ffec2a61383() Unknown Qt5Core.dll!QEventLoop::exec(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 203 C++ Qt5Core.dll!QCoreApplication::exec() Line 1188 C++ > xxx.exe!main(int argc, char * * argv) Line 412 C++ xxx.exe!WinMain() Unknown xxx.exe!__tmainCRTStartup() Line 618 C kernel32.dll!BaseThreadInitThunk() Unknown ntdll.dll!RtlUserThreadStart() Unknown