GNOME Bugzilla – Bug 752577
infinite loop on using nautilus menu
Last modified: 2015-07-31 02:38:51 UTC
In Files (nautilus), trying to use "Reload" or "Visible Columns...", or doing nothing and trying to cancel that menu, results in nautilus becoming unresponsive and using 100% CPU. gtk3-3.16.5-1.fc22 nautilus-3.16.2-2.fc22 Those functions in nautilus work OK with gtk+ 3.16.4. If I kill nautilus, or eventually it will crash, part of the backtrace is: Program received signal SIGSEGV, Segmentation fault. 0x00007ffff4da8dc4 in emission_find (instance=0xa80b70, detail=149, signal_id=1) at gsignal.c:761 761 gsignal.c: No such file or directory. (gdb) bt
+ Trace 235285
Created attachment 307985 [details] [review] GtkMenuButton: explicitly protect against recursion The visibility toggling happening on ::click() relied implicitly on the popover animation, but breaks on disabled animations. The recursion happening within gtk_toggle_button_set_active() (which triggers ::clicked when changing state) makes this vfunc to run again, inverting the visibility of the popover in result. Fix this by explicitly checking about recursion, we want the button to be toggled to the right state, but we don't want the callback running again.
Review of attachment 307985 [details] [review]: I wonder why we have to rely on the menu/popover visiblity at all to get the current state here - the toggle button already has an active field that we could just use ?
Attachment 307985 [details] pushed as 65f7fb0 - GtkMenuButton: explicitly protect against recursion