GNOME Bugzilla – Bug 670591
nautilus crashed with SIGSEGV in g_object_get() (real_slot_set_short_status)
Last modified: 2012-08-01 18:36:47 UTC
The bug is collecting quite some duplicates on launchpad since this cycle, https://bugs.launchpad.net/ubuntu/+source/nautilus/+bug/929031 "#0 0x00007f70ea4e6c53 in g_object_get (_object=0xaaaaaaaaaaaaaaaa, first_property_name=0x506358 "disable-chrome") at /build/buildd/glib2.0-2.31.16/./gobject/gobject.c:2091 __inst = 0xaaaaaaaaaaaaaaaa __r = <optimized out> _g_boolean_var_ = <optimized out> object = 0xaaaaaaaaaaaaaaaa var_args = {{gp_offset = 3724847072, fp_offset = 32767, overflow_arg_area = 0x515a57, reg_save_area = 0x1}} __PRETTY_FUNCTION__ = "g_object_get"
+ Trace 229710
the descriptions are not giving useful details on how to trigger the bug but it's still an issue in 3.3.90
crash => critical
Created attachment 208589 [details] [review] Proposed patch This is a race, so it's hard to reproduce, but code analysis makes me think I've found the problem. For background: WindowSlots and WindowPanes are closely coupled life-cycle wise. For example, the Pane pointer in a Slot isn't even ref'd because the assumption is that they will be destroyed together. But in set_floating_bar_status(), Slot adds a ref to itself that lasts during a timeout. This ref is unnecessary, since (A) the Slot will kill the timeout safely during its dispose and (B) it's not important for the timeout to finish if the Slot would normally die. This ref breaks the normal assumption in Pane that all slots are properly destroyed when removed as children from the Pane during its own destruction. When the timeout callback function is finally called, the internal Pane pointer of the Slot will be garbage and you get this crash. The attached patch fixes the extraneous ref. I have not actually run with this patch, but it seems trivial and safe.
Review of attachment 208589 [details] [review]: Thanks, I think your analysis is right.
Pushed this to master now.
*** Bug 670648 has been marked as a duplicate of this bug. ***