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

QFileSystemModel hang fetching file icons in main thread

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Out of scope
    • Icon: Not Evaluated Not Evaluated
    • None
    • 4.8.2
    • Widgets: Itemviews
    • None
    • Qt 4.8.2 on Windows

      QFileSystemModel lists directories on a background thread to avoid blocking the UI. However, once it gets a list of updates in QFileSystemModelPrivate::_q_fileSystemChanged it then fetches the icons for the file in the main thread using QFileInfoGatherer::getInfo() which in turn calls QFileIconProvider::icon(QFileInfo).

      On Windows (and possibly Mac as well, though we've only observed the problem directly on Windows), the QFIP::icon() call can take a long time, especially when listing folders somewhere on a remote file system.

      See also the related issue QTBUG-6039

      Sample backtrace:

      _nh_malloc_dbg(nSize=104, nhFlag=0, nBlockUse=1, szFileName=0x00000000, nLine=0) Line 302	C++
       	malloc(nSize=476708688) Line 56	C++
       	00ca9824	
       	QThreadData::current() Line 102	C++
       	5c5b2604	
      >	QFileIconProviderPrivate::getWinIcon(fileInfo={...}) Line 263	C++
       	QFileIconProvider::icon(info={...}) Line 422	C++
       	QFileInfoGatherer::getInfo(fileInfo={...}) Line 233	C++
       	QFileSystemModelPrivate::_q_fileSystemChanged(path={...}, updates={...}) Line 1829	C++
       	QFileSystemModel::qt_static_metacall(_o=0x1c4bb8e0, _c=InvokeMetaMethod, _id=5, _a=0x1c50c0e0) Line 76	C++
       	QMetaCallEvent::placeMetaCall(object=0x1c4bb8e0) Line 525	C++
       	QObject::event(e=0x1c50c128) Line 1195	C++
       	QFileSystemModel::event(event=0x1c50c128) Line 1635	C++
       	QApplicationPrivate::notify_helper(receiver=0x1c4bb8e0, e=0x1c50c128) Line 4551	C++
       	QApplication::notify(receiver=0x1c4bb8e0, e=0x1c50c128) Line 3933	C++
       	QCoreApplication::notifyInternal(receiver=0x1c4bb8e0, event=0x1c50c128) Line 915	C++
       	QCoreApplication::sendEvent(receiver=0x1c4bb8e0, event=0x1c50c128) Line 231	C++
       	QCoreApplicationPrivate::sendPostedEvents(receiver=0x00000000, event_type=0, data=0x05c00a80) Line 1539	C++
       	qt_internal_proc(hwnd=0x005107ce, message=1025, wp=0, lp=0) Line 496	C++
      

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

            stephen.kelly Stephen Kelly (Unused account) (Inactive)
            robertknight Robert Knight
            Votes:
            1 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved:

                There are no open Gerrit changes