Created attachment 123086 [details] full backtrace SUMMARY I have a symlink in my home directory that points to the mountpoint for an NFS share. Having that share mounted but the remote server offline (suspended) causes seemingly random application-wide freezes in KDevelop while it somehow attempts to get the mime type for the symlink. I noticed the 1st freeze in a session that was up and running but it is easier to reproduce during session load. NB: the symlink is unrelated to any of the projects in the session in question, i.e. KDevelop is threspassing. STEPS TO REPRODUCE 1. mount an NFS share 2. create a symlink to the mountpoint under $HOME (or mount the share under $HOME, presumably) 3. take the server offline (put it to sleep, possibly while the test computer is suspended too) 4. open a KDevelop session with one or more projects that take some time to load 5. observe and use the session. OBSERVED RESULT From time to time KDevelop will freeze for more than a few seconds while an attempt is made to obtain information from a file it has no business with EXPECTED RESULT No freezing, no messing with irrelevant files. SOFTWARE/OS VERSIONS Windows: macOS: Linux: 4.14 KDE Frameworks Version: 5.60.0 Qt Version: 5.9.8 ADDITIONAL INFORMATION Force-unmounting the mount unblocked KDevelop Partial backtrace: * frame #0: 0x00007f90d663acf5 libc.so.6`__GI___xstat(vers=69773768, name="/Users/bertin/WinBertin@Debian", buf=0x00007ffe793d2f28) at xstat.c:35 frame #1: 0x00007f90d746175f libQt5Core.so.5`QMimeDatabase::mimeTypeForFile(QFileInfo const&, QMimeDatabase::MatchMode) const [inlined] stat64(__path=<unavailable>, __statbuf=0x0000000004094060) at stat.h:504:10 frame #2: 0x00007f90d746175a libQt5Core.so.5`QMimeDatabase::mimeTypeForFile(this=0x00007ffe793d3048, fileInfo=0x00007ffe793d3000, mode=MatchDefault) const at qmimedatabase.cpp:372 frame #3: 0x00007f90d746243f libQt5Core.so.5`QMimeDatabase::mimeTypeForUrl(QUrl const&) const at qmimedatabase.cpp:427:16 frame #4: 0x00007f90d7462425 libQt5Core.so.5`QMimeDatabase::mimeTypeForUrl(this=0x00007ffe793d3048, url="/Users/bertin/WinBertin@Debian") const at qmimedatabase.cpp:523 frame #5: 0x00007f90da7ed374 libKF5KIOCore.so.5`KFileItemPrivate::determineMimeTypeHelper(this=0x00000000047ecab0, url="/Users/bertin/WinBertin@Debian") const at kfileitem.cpp:504:25 frame #6: 0x00007f90da7f09c9 libKF5KIOCore.so.5`KFileItem::determineMimeType(this=0x00007ffe793d3160) const at kfileitem.cpp:804:16 frame #7: 0x00007f90d59d5f23 libKF5KIOFileWidgets.so.5`KFilePreviewGenerator::Private::resolveMimeType(this=<unavailable>) at kfilepreviewgenerator.cpp:879:18 frame #8: 0x00007f90d74114a1 libQt5Core.so.5`QObject::event(this=0x0000000002cecc90, e=<unavailable>) at qobject.cpp:1252:18 frame #9: 0x00007f90d90379a7 libQt5Widgets.so.5`QApplicationPrivate::notify_helper(this=0x0000000001180110, receiver=0x0000000002cecc90, e=0x0000000004853fb0) at qapplication.cpp:3722:31 frame #10: 0x00007f90d9034d58 libQt5Widgets.so.5`QApplication::notify(this=0x00007ffe793d3b00, receiver=<unavailable>, e=0x0000000004853fb0) at qapplication.cpp:0:9 frame #11: 0x00007f90d73e9426 libQt5Core.so.5`QCoreApplication::notifyInternal2(receiver=0x0000000002cecc90, event=0x0000000004853fb0) at qcoreapplication.cpp:1031:18 frame #12: 0x00007f90d73ea2af libQt5Core.so.5`QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) [inlined] QCoreApplication::sendEvent(receiver=<unavailable>, event=<unavailable>) at qcoreapplication.h:233:44 frame #13: 0x00007f90d73ea29b libQt5Core.so.5`QCoreApplicationPrivate::sendPostedEvents(receiver=0x0000000000000000, event_type=0, data=0x000000000117c340) at qcoreapplication.cpp:1706 frame #14: 0x00007f90d7439963 libQt5Core.so.5`postEventSourceDispatch(s=0x00000000012f2130, (null)=<unavailable>, (null)=<unavailable>)(void*), void*) at qeventdispatcher_glib.cpp:276:5 frame #15: 0x00007f90cd0ed0e5 libglib-2.0.so.0`g_main_context_dispatch at gmain.c:3170:27 frame #16: 0x00007f90cd0ecf57 libglib-2.0.so.0`g_main_context_dispatch(context=<unavailable>) at gmain.c:3835 frame #17: 0x00007f90cd0ed7b5 libglib-2.0.so.0`g_main_context_iterate(context=<unavailable>, block=<unavailable>, dispatch=<unavailable>, self=<unavailable>) at gmain.c:3908:5 frame #18: 0x00007f90cd0eda21 libglib-2.0.so.0`g_main_context_iteration(context=0x00007f90bc003030, may_block=1) at gmain.c:3969:12 frame #19: 0x00007f90d743941b libQt5Core.so.5`QEventDispatcherGlib::processEvents(this=0x000000000138a7c0, flags=<unavailable>) at qeventdispatcher_glib.cpp:425:18 frame #20: 0x00007f90d73e52b2 libQt5Core.so.5`QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) [inlined] QEventLoop::processEvents(this=<unavailable>, flags=<unavailable>) at qeventloop.cpp:134:51 frame #21: 0x00007f90d73e5295 libQt5Core.so.5`QEventLoop::exec(this=0x00007ffe793d38d0, flags=<unavailable>) at qeventloop.cpp:212 frame #22: 0x00007f90d73e9aed libQt5Core.so.5`QCoreApplication::exec() at qcoreapplication.cpp:1304:32 frame #23: 0x000000000041382c kdevelop`main(argc=<unavailable>, argv=<unavailable>) at main.cpp:1002:12 frame #24: 0x00007f90d656df45 libc.so.6`__libc_start_main(main=(kdevelop`main at main.cpp:440), argc=2, argv=0x00007ffe793d3c58, init=<unavailable>, fini=<unavailable>, rtld_fini=<unavailable>, stack_end=0x00007ffe793d3c48) at libc-start.c:287 frame #25: 0x0000000000406864 kdevelop`_start + 41 (lldb) up frame #1: 0x00007f90d746175f libQt5Core.so.5`QMimeDatabase::mimeTypeForFile(QFileInfo const&, QMimeDatabase::MatchMode) const [inlined] stat64(__path=<unavailable>, __statbuf=0x0000000004094060) at stat.h:504:10 501 __extern_inline int 502 __NTH (stat64 (const char *__path, struct stat64 *__statbuf)) 503 { -> 504 return __xstat64 (_STAT_VER, __path, __statbuf); 505 } 506 507 # if defined __USE_BSD || defined __USE_XOPEN_EXTENDED (lldb) frame #2: 0x00007f90d746175a libQt5Core.so.5`QMimeDatabase::mimeTypeForFile(this=0x00007ffe793d3048, fileInfo=0x00007ffe793d3000, mode=MatchDefault) const at qmimedatabase.cpp:372 369 // In addition we want to follow symlinks. 370 const QByteArray nativeFilePath = QFile::encodeName(file.fileName()); 371 QT_STATBUF statBuffer; -> 372 if (QT_STAT(nativeFilePath.constData(), &statBuffer) == 0) { 373 if (S_ISCHR(statBuffer.st_mode)) 374 return d->mimeTypeForName(QLatin1String("inode/chardevice")); 375 if (S_ISBLK(statBuffer.st_mode)) (lldb) up frame #3: 0x00007f90d746243f libQt5Core.so.5`QMimeDatabase::mimeTypeForUrl(QUrl const&) const at qmimedatabase.cpp:427:16 424 } else { 425 // Implemented as a wrapper around mimeTypeForFile(QFileInfo), so no mutex. 426 QFileInfo fileInfo(fileName); -> 427 return mimeTypeForFile(fileInfo, mode); 428 } 429 } 430 (lldb) up frame #4: 0x00007f90d7462425 libQt5Core.so.5`QMimeDatabase::mimeTypeForUrl(this=0x00007ffe793d3048, url="/Users/bertin/WinBertin@Debian") const at qmimedatabase.cpp:523 520 QMimeType QMimeDatabase::mimeTypeForUrl(const QUrl &url) const 521 { 522 if (url.isLocalFile()) -> 523 return mimeTypeForFile(url.toLocalFile()); 524 525 const QString scheme = url.scheme(); 526 if (scheme.startsWith(QLatin1String("http")) || scheme == QLatin1String("mailto")) (lldb) p url (const QUrl) $1 = "/Users/bertin/WinBertin@Debian" { port = -1 scheme = <Invalid> userName = <Invalid> password = <Invalid> host = <Invalid> path = "/Users/bertin/WinBertin@Debian" query = <Invalid> fragment = <Invalid> }