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.

Reply via email to