https://bugs.kde.org/show_bug.cgi?id=412724
Bug ID: 412724 Summary: [KDevelop] UI freeze because of symlink to stale NFS mountpoint in $HOME Product: kdevelop Version: 5.4.2 Platform: Other OS: Linux Status: REPORTED Severity: normal Priority: NOR Component: general Assignee: kdevelop-bugs-n...@kde.org Reporter: rjvber...@gmail.com Target Milestone: --- Created attachment 123086 --> https://bugs.kde.org/attachment.cgi?id=123086&action=edit 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> } -- You are receiving this mail because: You are watching all bug changes.