Bug 318518 - Window freezes entering directory on nfs share
Summary: Window freezes entering directory on nfs share
Alias: None
Product: dolphin
Classification: Applications
Component: view-engine: details mode (show other bugs)
Version: 2.2
Platform: Fedora RPMs Linux
: NOR crash (vote)
Target Milestone: ---
Assignee: Dolphin Bug Assignee
Depends on:
Reported: 2013-04-17 18:56 UTC by Sascha Klein
Modified: 2013-09-04 19:52 UTC (History)
0 users

See Also:
Latest Commit:
Version Fixed In: 4.12.0


Note You need to log in before you can comment on or make changes to this bug.
Description Sascha Klein 2013-04-17 18:56:00 UTC
Got folder /pathToNas/some/other which contains about 1400 folders.
In detailed view mode entering one of these sooner or later ( mostly first or second one ) leads to frozen dolphin window. Other (dolphin) windows react.
Entering same folder via shell or krusader works fine.

Last call in strace is begins with write(9, "xxxxxx", 10 where xxxxxx varies and fd 9 is link to a socket.

Im on Fedora 18 Kernel 3.8.7-201.fc18.x86_64 kdelibs-4.10.1-1.fc18.x86_64
NFS share is on Synology NAS, connected via gbit-ethernet, no jumbo-frames, default mount options.

Reproducible: Always

Steps to Reproduce:
1.enter arbitrary folder in /pathToNas/some/other
Actual Results:  
window doesn't react any longer. Can mostly be killed by KDE

Expected Results:  
Open directory
Comment 1 Frank Reininghaus 2013-04-19 15:55:32 UTC
Thanks for the report. If it happens only in Details View, it might be because we count the number of items in all folders (to show it in the "Size" column and to decide whether to show an "expansion toggle" or not).

See the related forum discussion http://forum.kde.org/viewtopic.php?f=224&t=110767

The strange thing is that the code actually tries to determine if the folders are local (using KFileItem::isLocalFile()) and counts the items inside only if that is the case.

So it seems that this check goes wrong. To verify that: is a "Size" shown for the folders on the remote server? The size column should actually show "Unknown" for remote folders.
Comment 2 Sascha Klein 2013-04-21 10:49:59 UTC
Size column shows number of elements in folders.
I played around a little bit and got to a limit of about 600 folders, but until now didn't test whether its the amount of folders or if the number of elements in the folders is the limit
Comment 3 Frank Reininghaus 2013-04-22 08:27:51 UTC
OK, probably NFS is considered 'local' from KFileItem's point of view then (according to the API docs, 'local' means 'accessible via file:').

To be honest, I'm not sure if we can do anything about your problem. We could of course disable folder content counting for 'slow' file systems like NFS, but I can already see lots of complaints coming if we do that (like when loading of custom icons was disabled for slow file systems).

One could in principle move the counting function to another thread to prevent at least the blocking, but I'm not sure if that's worth the trouble - this approach might cause problems and subtle bugs in other situations.
Comment 4 Frank Reininghaus 2013-09-04 19:52:38 UTC
Git commit 81a6f33a87dfbdd082b2d87be59ac19a65a43771 by Frank Reininghaus.
Committed on 04/09/2013 at 19:49.
Pushed by freininghaus into branch 'master'.

Count the items inside directories in another thread

This prevents that the GUI freezes if there are many files inside the
directory, or if the access to the directory is slow for some other
REVIEW: 111920
FIXED-IN: 4.12.0

M  +2    -0    dolphin/src/CMakeLists.txt
M  +15   -113  dolphin/src/kitemviews/kfileitemmodelrolesupdater.cpp
M  +5    -11   dolphin/src/kitemviews/kfileitemmodelrolesupdater.h
A  +164  -0    dolphin/src/kitemviews/private/kdirectorycontentscounter.cpp     [License: GPL (v2+)]
A  +90   -0    dolphin/src/kitemviews/private/kdirectorycontentscounter.h     [License: GPL (v2+)]
A  +95   -0    dolphin/src/kitemviews/private/kdirectorycontentscounterworker.cpp     [License: GPL (v2+)]
A  +71   -0    dolphin/src/kitemviews/private/kdirectorycontentscounterworker.h     [License: GPL (v2+)]