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: [email protected]
Reporter: [email protected]
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.