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

[Windows] Crash on QFontCache::clear()

    XMLWordPrintable

Details

    • Bug
    • Resolution: Incomplete
    • P1: Critical
    • None
    • 6.2.4
    • GUI: Font handling
    • None
    • Windows 10
    • Windows

    Description

      Crash in QFontEngineMulti destructor on QFontCache::clear()

      Unhandled exception thrown: read access violation.
      **fontEngine** was 0xFFFFFFFFFFFFFFF3.
      

      I see a lot of such crashes on Qt 6.2.4 among users crash reports.
      It's never reproduced for me locally and I have no idea how to simulate this.

      Stack trace:

       	[Inline Frame] Qt6Gui.dll!std::_Atomic_integral<int,4>::operator--() Line 1598	C++
       	[Inline Frame] Qt6Gui.dll!QAtomicOps<int>::deref(std::atomic<int> &) Line 287	C++
       	[Inline Frame] Qt6Gui.dll!QBasicAtomicInteger<int>::deref() Line 102	C++
      >	Qt6Gui.dll!QFontEngineMulti::~QFontEngineMulti() Line 1736	C++
       	[External Code]	
       	Qt6Gui.dll!QFontCache::clear() Line 2942	C++
       	Qt6Gui.dll!QFontCache::~QFontCache() Line 2899	C++
       	[External Code]	
       	Qt6Core.dll!QThreadStorageData::finish(void * * p) Line 202	C++
       	Qt6Core.dll!QThreadPrivate::finish(void * arg, bool lockAnyway) Line 345	C++
       	Qt6Core.dll!QThreadPrivate::start(void * arg) Line 329	C++
       	[External Code]	
      

      At the same time UI thread is waiting while QSGRenderThread is finished on destroying a Window

      >	Qt6Core.dll!QThread::wait(QDeadlineTimer deadline) Line 537	C++
       	Qt6Quick.dll!QSGThreadedRenderLoop::releaseResources(QSGThreadedRenderLoop::Window * w, bool inDestructor) Line 1474	C++
       	Qt6Quick.dll!QSGThreadedRenderLoop::windowDestroyed(QQuickWindow * window) Line 1164	C++
       	Qt6Quick.dll!QQuickWindow::~QQuickWindow() Line 1132	C++
       	[External Code]	
       	[Inline Frame] Qt6Core.dll!qDeleteInEventHandler(QObject *) Line 4778	C++
       	Qt6Core.dll!QObject::event(QEvent * e) Line 1396	C++
       	Qt6Gui.dll!QWindow::event(QEvent * ev) Line 2550	C++
       	Qt6Widgets.dll!QApplicationPrivate::notify_helper(QObject * receiver, QEvent * e) Line 3411	C++
       	Qt6Widgets.dll!QApplication::notify(QObject * receiver, QEvent * e) Line 3363	C++
       	Qt6Core.dll!QCoreApplication::notifyInternal2(QObject * receiver, QEvent * event) Line 1067	C++
       	[Inline Frame] Qt6Core.dll!QCoreApplication::sendEvent(QObject *) Line 1475	C++
       	Qt6Core.dll!QCoreApplicationPrivate::sendPostedEvents(QObject * receiver, int event_type, QThreadData * data) Line 1834	C++
       	Qt6Gui.dll!QWindowsGuiEventDispatcher::sendPostedEvents() Line 80	C++
       	Qt6Core.dll!QEventDispatcherWin32::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 476	C++
       	Qt6Gui.dll!QWindowsGuiEventDispatcher::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 73	C++
       	[Inline Frame] Qt6Core.dll!QEventLoop::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag>) Line 139	C++
       	Qt6Core.dll!QEventLoop::exec(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 230	C++
       	Qt6Core.dll!QCoreApplication::exec() Line 1382	C++
      

      I don't know what is a working thread where QFontCache live, never experienced with this before. But at first glance it looks like some race condition on the Window destruction.

      Attachments

        Issue Links

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

          Activity

            People

              esabraha Eskil Abrahamsen Blomfeldt
              studiosus Vladimir Belyavsky
              Votes:
              2 Vote for this issue
              Watchers:
              7 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Gerrit Reviews

                  There are no open Gerrit changes