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

Crash when dragging a QML GridView cell with a Windows touchscreen

    XMLWordPrintable

Details

    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
      

      Attachments

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

        Activity

          People

            smd Jan Arve
            chrisdolan Chris Dolan
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:

              Gerrit Reviews

                There are no open Gerrit changes