GLib warnings when using a combobox in a treeview cell
Submitted by Pet..@..et.com
Link to original bug (#793745)
Description
I'm getting these warnings when using a combobox in a treeview cell:
(combo:1180): GLib-GObject-CRITICAL **: g_object_notify: assertion 'G_IS_OBJECT (object)' failed
(combo:1180): GLib-GObject-CRITICAL **: g_object_set: assertion 'G_IS_OBJECT (object)' failed
They occure when selecting an item from the combobox.
I've traced this down to the combobox object getting freed/finalised too early. The back trace below shows (#0) gtk_combo_box_finalize being called from within (#3 (closed)) g_signal_emit_valist which is called from (#5 (closed)) gtk_combo_box_set_active_internal which is calling g_signal_emit (combo_box, combo_box_signals[CHANGED], 0);
NOTE: line numbers are incorrect as my sources have had quite a lot of extra debugging included while I've been tracking this down.
Thread 1 "combo" hit Breakpoint 1, gtk_combo_box_finalize (object=0x106348) at gtkcombobox.c:4427 4427 {
(gdb) bt
#0 gtk_combo_box_finalize (object=0x106348) at gtkcombobox.c:4427
#1 0x76513fc0 in g_object_unref (_object=0x106348) at gobject.c:3330
#2 0x765390e4 in g_value_unset (value=value@entry=0x7effe6a8) at gvalue.c:275
#3 0x7652b198 in g_signal_emit_valist (instance=instance@entry=0x106348,
signal_id=<optimized out>, detail=detail@entry=1985027368, var_args=...,
var_args@entry=...) at gsignal.c:3435
#4 0x7652b594 in g_signal_emit (instance=instance@entry=0x106348,
signal_id=<optimized out>, detail=0) at gsignal.c:3466
#5 0x76a8c640 in gtk_combo_box_set_active_internal (
combo_box=combo_box@entry=0x106348, path=path@entry=0x1234c0)
at gtkcombobox.c:3920
#6 0x76a909b4 in gtk_combo_box_set_active_iter (combo_box=0x106348,
iter=<optimized out>) at gtkcombobox.c:4010
#7 0x76a90cb8 in gtk_combo_box_menu_activate (menu=<optimized out>,
path=path@entry=0x227500 "3", combo_box=0x106348) at gtkcombobox.c:2826
#8 0x76511da0 in g_cclosure_marshal_VOID__STRINGv (closure=0x2497a0,
return_value=<optimized out>, instance=0x24a2d8, args=...,
marshal_data=0x0, n_params=1, param_types=0x247d80) at gmarshal.c:1794
#9 0x7650f4c0 in _g_closure_invoke_va (closure=closure@entry=0x2497a0,
return_value=return_value@entry=0x0, instance=instance@entry=0x24a2d8,
args=args@entry=..., n_params=1, param_types=0x247d80) at gclosure.c:867
#10 0x7652aee0 in g_signal_emit_valist (instance=instance@entry=0x24a2d8,
signal_id=<optimized out>, detail=detail@entry=0, var_args=...,
var_args@entry=...) at gsignal.c:3300
#11 0x7652b594 in g_signal_emit (instance=instance@entry=0x24a2d8,
signal_id=<optimized out>, detail=0) at gsignal.c:3466
#12 0x76cac1e4 in item_activated_cb (item=<optimized out>, menu=0x24a2d8)
at gtktreemenu.c:1434
#13 0x7650f25c in g_closure_invoke (closure=0x24ced0, return_value=0x0,
return_value@entry=0x1, n_param_values=1, param_values=0x7effead0,
param_values@entry=0x7effebd4,
invocation_hint=invocation_hint@entry=0x7effea8c) at gclosure.c:804
#14 0x76522308 in signal_emit_unlocked_R (node=node@entry=0x69490,
detail=2493897472, detail@entry=0, instance=0x2a8, instance@entry=0x3ea10,
emission_return=emission_return@entry=0x0,
instance_and_params=instance_and_params@entry=0x7effead0) at gsignal.c:3654
#15 0x7652b158 in g_signal_emit_valist (instance=instance@entry=0x3ea10,
signal_id=<optimized out>, detail=detail@entry=1985008124, var_args=...,
var_args@entry=...) at gsignal.c:3399
#16 0x7652b594 in g_signal_emit (instance=instance@entry=0x3ea10,
signal_id=<optimized out>, detail=0) at gsignal.c:3466
#17 0x76cf23bc in gtk_widget_activate (widget=widget@entry=0x3ea10)
at gtkwidget.c:7771
#18 0x76b9c7f4 in gtk_menu_shell_activate_item (menu_shell=0x24a2d8,
menu_item=0x3ea10, force_deactivate=<optimized out>) at gtkmenushell.c:1375
#19 0x76b9cb94 in gtk_menu_shell_button_release (widget=<optimized out>,
event=<optimized out>) at gtkmenushell.c:791
#20 0x76b7f618 in _gtk_marshal_BOOLEAN__BOXEDv (closure=0x62ba0,
return_value=0x7effecf8, instance=0x24a2d8, args=...,
marshal_data=0x76b8c294 <gtk_menu_button_release>, n_params=1,
param_types=0x62bd8) at gtkmarshalers.c:129
---Type <return> to continue, or q <return> to quit---
#21 0x7650f4c0 in _g_closure_invoke_va (closure=closure@entry=0x62ba0,
return_value=return_value@entry=0x7effecf8,
instance=instance@entry=0x24a2d8, args=args@entry=..., n_params=1,
param_types=0x62bd8) at gclosure.c:867
#22 0x7652a80c in g_signal_emit_valist (instance=instance@entry=0x24a2d8,
signal_id=<optimized out>, detail=detail@entry=470792, var_args=...,
var_args@entry=...) at gsignal.c:3300
#23 0x7652b594 in g_signal_emit (instance=instance@entry=0x24a2d8,
signal_id=<optimized out>, detail=0) at gsignal.c:3466
#24 0x76cef87c in gtk_widget_event_internal (widget=0x24a2d8, event=0x1a5808)
at gtkwidget.c:7738
#25 0x76b7bbe4 in propagate_event_up (topmost=<optimized out>,
event=<optimized out>, widget=0x24a2d8) at gtkmain.c:2582
#26 propagate_event (widget=<optimized out>, event=0x1a5808,
captured=<optimized out>, topmost=0x0) at gtkmain.c:2684
#27 0x76b7e270 in gtk_main_do_event (event=0x1a5808) at gtkmain.c:1915
#28 0x768aa7b0 in _gdk_event_emit (event=event@entry=0x1a5808)
at gdkevents.c:73
#29 0x768e13d4 in gdk_event_source_dispatch (source=<optimized out>,
callback=<optimized out>, user_data=<optimized out>)
at gdkeventsource.c:367
#30 0x76444970 in g_main_dispatch (context=0x576d8) at gmain.c:3165
#31 g_main_context_dispatch (context=context@entry=0x576d8) at gmain.c:3818
#32 0x76444ba4 in g_main_context_iterate (context=0x576d8,
block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>)
at gmain.c:3891
#33 0x76444f0c in g_main_loop_run (loop=0x20b068) at gmain.c:4087
#34 0x76b7d088 in gtk_main () at gtkmain.c:1323
#35 0x000111d0 in main (argc=1, argv=0x7efff0a4) at combo.c:132
(gdb) q
A debugging session is active.
Inferior 1 [process 2348] will be killed.
Quit anyway? (y or n) y
Peter Onion
Version: 3.22.x