Hi, Working with Xfce/Thunar I soon noticed bug 2502 (freezes when hiding switched on). This bug seems to be related to bug 4051, 3602, and 2902. Since I'm pretty new to Thunar and have only limited experience in C, I would like to know whether my understanding of these bugs is correct. As far as I can see browsing through the source code and enabling all debug logs the following goes wrong.
All misery starts in 'thunar/thunar_tree_model.c'. It's the model of the model-view combination for the GTK_Tree_View widget that shows the directory tree. When the user activates a node in the tree, the node opens and shows all subnodes within the node. However, each subnode wants to know whether it has at least one subnode itself, because of the nice little triangle it then needs to show. The TreeView widget asks thunar_tree_model whether a node has a subnode. At this moment thunar_tree_model queries the node and creates an iterator for every subnode it finds. However, every iterator contains a file/directory object that wants to be notified of any changes - not only _of_ the directory, but also _in_ the directory. This does cause some problems for a directory like /proc and /dev. Problems worsen because of caching within thunar_tree_model. I'm not sure about this (bit complicated due to the filter on top of the model and the ref_node mechanism that allows caching), but it seems that the file/directory objects are kept alive as long as the thunar_tree_model exists. This also implies that the directory/file objects want to be informed of all changes within each directory (if /proc is shown, a directory object exists for every subdir in /proc and every subdir wants to be informed about every change _within_ that subdir. This add up!!) Unfortunately, we're not there yet. Thunar uses FAM/GAMIN for monitoring the filesystem. FAM/GAMIN uses efficient kernel monitoring to monitor changes to normal mounts (ext2/ext3/reiserfs etc). However, FAM/Gamin falls back to polling on special mount points like /proc, /dev (and SD cards, Fuse mounts etc...) So now Thunar wants be informed about changes to /proc and subdirs and FAM/Gamin polls everything. This is pretty time consuming (many, many files, and even more notifications since many files in /proc change every millisecond). This causes the crashes mentioned in the bug reports. This explains the problems in bug 2502/3602 (crashes/freezes hiding/unhiding) because hiding/unhiding simply involves requerying all nodes. Especially hiding is tricky because all nodes are polled (is it suddenly a hidden file/dir??) It also explains bug 2902 (Thunar slows down browsing larger subdirs). As mentioned there by Jan Rathmann, this behaviour is specific for newer versions of GTK (maybe the new TreeView is more aggressive in obtaining information)? A solution would consists of two steps: 1) Prevent caching too many nodes within thunar_tree_model, preferably prevent creation of these nodes. 2) If possible, prevent poll notifications. This does imply that information might be outdated, but there is a speed/accuracy trade-off. Regards, _______________________________________________ Thunar-dev mailing list Thunar-dev@xfce.org http://foo-projects.org/mailman/listinfo/thunar-dev