gamin-0.0.14-1, current rawhide, x86_64 dual opteron.
Output from SIGUSR2 shows it's looping through the following list of
files. Looks like a poll_file loop is stuck. Quick source read
points at gam_poll_scan_directory_internal and the for loop:
for (l = children; l; l = l->next) {
Poll: poll_file for
/usr/share/applications/gnome-accessibility.desktop called
at 1097770113 delta 0 : 0 Poll: poll_file
/usr/share/applications/gnome-accessibility.desktop unchanged
1097700841 0 : 1097700841 0
Poll: poll_file for
/usr/share/applications/redhat-neat-control.desktop called at
1097770113 delta 0 : 0
Poll: poll_file /usr/share/applications/redhat-neat-control.desktop
unchanged
1096989180 0 : 1096989180 0
Poll: poll_file for
/usr/share/applications/redhat-rhn-up2date-config.desktop called
at 1097770113 delta 0 : 0
Poll: poll_file
/usr/share/applications/redhat-rhn-up2date-config.desktop unchanged
1095979273 0 : 1095979273 0
And gdb confirms this:
(gdb) bt
#0 0x0000002a95721945 in ?? ()
#1 0x0000000000404701 in poll_file (node=0x523b40) at stat.h:366
#2 0x0000000000404b46 in gam_poll_scan_directory_internal (dir_node=0x0,
exist_subs=0x0, scan_for_new=1) at gam_poll.c:446
#3 0x0000000000404f33 in gam_poll_scan_callback (data=0x5303d0)
at gam_poll.c:550
#4 0x00000036cc52942b in ?? ()
(gdb) list gam_poll.c:446
441 }
442 children = gam_tree_get_children(tree, dir_node);
443 for (l = children; l; l = l->next) {
444 node = (GamNode *) l->data;
445
446 fevent = poll_file(node);
447
448 if (gam_node_is_dir(node) &&
449 gam_node_has_flag(node, FLAG_NEW_NODE) &&
450 gam_node_get_subscriptions(node)) {
gamin-0.0.14-1, current rawhide, x86_64 dual opteron. scan_directory_ internal and the for loop:
Output from SIGUSR2 shows it's looping through the following list of
files. Looks like a poll_file loop is stuck. Quick source read
points at gam_poll_
for (l = children; l; l = l->next) {
Poll: poll_file for applications/ gnome-accessibi lity.desktop called applications/ gnome-accessibi lity.desktop unchanged applications/ redhat- neat-control. desktop called at applications/ redhat- neat-control. desktop applications/ redhat- rhn-up2date- config. desktop called applications/ redhat- rhn-up2date- config. desktop unchanged
/usr/share/
at 1097770113 delta 0 : 0 Poll: poll_file
/usr/share/
1097700841 0 : 1097700841 0
Poll: poll_file for
/usr/share/
1097770113 delta 0 : 0
Poll: poll_file /usr/share/
unchanged
1096989180 0 : 1096989180 0
Poll: poll_file for
/usr/share/
at 1097770113 delta 0 : 0
Poll: poll_file
/usr/share/
1095979273 0 : 1095979273 0
And gdb confirms this:
(gdb) bt scan_directory_ internal (dir_node=0x0, scan_callback (data=0x5303d0) get_children( tree, dir_node); is_dir( node) && has_flag( node, FLAG_NEW_NODE) && get_subscriptio ns(node) ) {
#0 0x0000002a95721945 in ?? ()
#1 0x0000000000404701 in poll_file (node=0x523b40) at stat.h:366
#2 0x0000000000404b46 in gam_poll_
exist_subs=0x0, scan_for_new=1) at gam_poll.c:446
#3 0x0000000000404f33 in gam_poll_
at gam_poll.c:550
#4 0x00000036cc52942b in ?? ()
(gdb) list gam_poll.c:446
441 }
442 children = gam_tree_
443 for (l = children; l; l = l->next) {
444 node = (GamNode *) l->data;
445
446 fevent = poll_file(node);
447
448 if (gam_node_
449 gam_node_
450 gam_node_
(gdb) print l applications/ redhat- neat-control. desktop" , subs = 0x0, data_destroy> ,
$1 = (GList *) 0x51ea60
(gdb) print l->next
$2 = (GList *) 0x523920
(gdb) print l->next->next
$3 = (GList *) 0x51ea78
(gdb) print l->next->next->next
$4 = (GList *) 0x51ea60
(gdb) p children
$5 = (GList *) 0x53ddd0
(gdb) p *(GamNode *)l->data
$6 = {path = 0x523c10
"/usr/share/
data = 0x530210, data_destroy = 0x404380 <gam_poll_
flags = 0, node = 0x515f78, is_dir = 0}
This list is not NULL terminated.