2013-11-08 09:12, John Emmas skrev:
On 07/11/2013 17:39, John Emmas wrote:
On 07/11/2013 16:08, Kjell Ahlstedt wrote:
I've used gdb to see what's happening in the functions that you
mention. The datalist in g_datalist_get_data() contains 2 entries:
-- GQuark 1007, "gtk-window-icon-info"
-- GQuark 181, "glibmm_Glib::quark_cpp_wrapper_deleted_"
You're right. In my build (now building from the tarball sources)
the number of registered quarks (in other words, seq_id) is 995. At
the point where it crashes the number of datalist entries (d->len)
equals 3 and their values are:-
1st entry: 93 // Don't know how to work
2nd entry: 856 // out what these ones are
3rd entry: 3219138047 // I'm assuming this one's garbage.
The above values are the values I get when the search string is
"gtk-selection-handlers". For other search strings I get different
values.
Hi Kjell,
Better late than never but this morning, I realised I could simply
print out the relevant strings! Here's what I'm getting for those
first two entries:-
1st entry (GQuark 93) = "glibmm__Glib::quark_"
2nd entry (GQuark 856) = "gtk-window-icon-info"
Notice that my 2nd string is the same as your 1st string. I wonder if
this indicates some kind of alignment problem?
John
There are two errors in your datalist, I think.
First of course the third garbage entry.
Second glibmm_Glib::quark_ instead of
glibmm_Glib::quark_cpp_wrapper_deleted_.
Here's a backtrace from gdb when gtk_widget_unrealize() is called, with
some missing functions manually added.
#0 g_quark_to_string (quark=1007) at gquark.c:260
#1 0x00007ffff4f84648 in g_datalist_get_data
(datalist=datalist@entry=0x6bf0e0,
key=key@entry=0x7ffff5ad8c30 <gtk_selection_handler_key>
"gtk-selection-handlers")
at gdataset.c:1036
#2 0x00007ffff529a83f in g_object_get_data (object=object@entry=0x6bf0d0,
key=key@entry=0x7ffff5ad8c30 <gtk_selection_handler_key>
"gtk-selection-handlers")
at gobject.c:3444
#3 0x00007ffff590f5f8 in gtk_selection_target_list_remove
(widget=0x6bf0d0) at gtkselection.c:817
#4 IA__gtk_selection_remove_all (widget=widget@entry=0x6bf0d0) at
gtkselection.c:999
#5 0x00007ffff59bfa5f in gtk_widget_real_unrealize (widget=0x6bf0d0) at
gtkwidget.c:8950
#6 0x00007ffff5291007 in _g_closure_invoke_va (closure=0x6a98c0,
return_value=0x0,
instance=0x6bf0d0, args=0x7fffffffd758, n_params=0,
param_types=0x0) at gclosure.c:840
#7 0x00007ffff52aae5c in g_signal_emit_valist (instance=0x6bf0d0,
signal_id=<optimized out>,
detail=<optimized out>, var_args=var_args@entry=0x7fffffffd758) at
gsignal.c:3238
#8 0x00007ffff52ab732 in g_signal_emit (instance=instance@entry=0x6bf0d0,
signal_id=<optimized out>, detail=detail@entry=0) at gsignal.c:3386
#9 0x00007ffff59c3592 in IA__gtk_widget_unrealize (widget=0x6bf0d0) at
gtkwidget.c:3605
#10 0x00007ffff59c4a20 in gtk_widget_dispose (object=0x6bf0d0) at
gtkwidget.c:8791
#11 0x00007ffff5297730 in g_object_run_dispose (object=0x6bf0d0) at
gobject.c:1077
Missing from gdb's backtrace:
gtk_object_destroy() gtkobject.c:402
Gtk::Window::_destroy_c_instance() window.cc:111
Gtk::Window::destroy_() window.cc:97
#12 0x00007ffff7aa1dcf in Gtk::Window::~Window (this=0x6a5ff0,
__in_chrg=<optimized out>,
__vtt_parm=<optimized out>) at window.cc:612
#13 0x00007ffff7aa1ea9 in Gtk::Window::~Window (this=0x6a5ff0,
__in_chrg=<optimized out>,
__vtt_parm=<optimized out>) at window.cc:613
#14 0x0000000000400b60 in main (argc=1, argv=0x7fffffffd9b8) at main3.cc:13
Before Gtk::Window::_destroy_c_instance() calls gtk_object_destroy(), it
calls Gtk::Object::disconnect_cpp_wrapper(), which removes
glibmm_Glib::quark_ and adds glibmm_Glib::quark_cpp_wrapper_deleted_.
I have run your test case that contains /delete mainWnd/.
Which versions of glib, glibmm, gtk+, and gtkmm do you use?
Kjell
_______________________________________________
gtkmm-list mailing list
gtkmm-list@gnome.org
https://mail.gnome.org/mailman/listinfo/gtkmm-list