[Bug 82373] Re: segfault in gnome-keyboard-properties
hggdh
hggdh2 at gmail.com
Fri Feb 2 17:38:12 UTC 2007
OK, I accept it. The only issue I have is that I have never programmed
under GTK, so I am not willing to write a patch on this.
Nevertheless, I can -- and did -- debug the application, and this is
what I see:
hggdh at xango:/usr/src/src/gnome-control-center/control-center-2.17.90/capplets/keyboard$ gdb /usr/src/src/gnome-control-center/control-center-2.17.90/capplets/keyboard/.libs/lt-gnome-keyboard-properties
GNU gdb 6.6-debian
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu"...
Using host libthread_db library "/lib/libthread_db.so.1".
(gdb) run
Starting program: /usr/src/src/gnome-control-center/control-center-2.17.90/capplets/keyboard/.libs/lt-gnome-keyboard-properties
[Thread debugging using libthread_db enabled]
[New Thread 47079464161120 (LWP 29427)]
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 47079464161120 (LWP 29427)]
def_group_in_gconf_changed (client=<value optimized out>, cnxn_id=<value optimized out>, entry=<value optimized out>, dialog=0x629100) at gnome-keyboard-properties-xkblt.c:128
128 if (value->type == GCONF_VALUE_INT) {
(gdb) backtrace
#0 def_group_in_gconf_changed (client=<value optimized out>, cnxn_id=<value optimized out>, entry=<value optimized out>, dialog=0x629100)
at gnome-keyboard-properties-xkblt.c:128
#1 0x000000000040a60f in xkb_layouts_fill_selected_tree (dialog=0x629100) at gnome-keyboard-properties-xkblt.c:417
#2 0x0000000000408b2d in setup_xkb_tabs (dialog=0x629100, changeset=0x0) at gnome-keyboard-properties-xkb.c:179
#3 0x00000000004084a7 in main (argc=<value optimized out>, argv=<value optimized out>) at gnome-keyboard-properties.c:172
(gdb) list
123 guint cnxn_id,
124 GConfEntry * entry, GladeXML * dialog)
125 {
126 GConfValue *value = gconf_entry_get_value (entry);
127
128 if (value->type == GCONF_VALUE_INT) {
129 GtkWidget *tree_view = WID ("xkb_layouts_selected");
130 GtkTreeModel *model =
131 GTK_TREE_MODEL (gtk_tree_view_get_model
132 (GTK_TREE_VIEW (tree_view)));
(gdb) backtrace
#0 def_group_in_gconf_changed (client=<value optimized out>, cnxn_id=<value optimized out>, entry=<value optimized out>, dialog=0x629100)
at gnome-keyboard-properties-xkblt.c:128
#1 0x000000000040a60f in xkb_layouts_fill_selected_tree (dialog=0x629100) at gnome-keyboard-properties-xkblt.c:417
#2 0x0000000000408b2d in setup_xkb_tabs (dialog=0x629100, changeset=0x0) at gnome-keyboard-properties-xkb.c:179
#3 0x00000000004084a7 in main (argc=<value optimized out>, argv=<value optimized out>) at gnome-keyboard-properties.c:172
(gdb) list 123
118 gtk_tree_path_free (chpath);
119 }
120
121 static void
122 def_group_in_gconf_changed (GConfClient * client,
123 guint cnxn_id,
124 GConfEntry * entry, GladeXML * dialog)
125 {
126 GConfValue *value = gconf_entry_get_value (entry);
127
(gdb) list
128 if (value->type == GCONF_VALUE_INT) {
129 GtkWidget *tree_view = WID ("xkb_layouts_selected");
130 GtkTreeModel *model =
131 GTK_TREE_MODEL (gtk_tree_view_get_model
132 (GTK_TREE_VIEW (tree_view)));
133 GtkTreeIter iter;
134 int counter = 0;
135 default_group = gconf_value_get_int (value);
136 if (gtk_tree_model_get_iter_first (model, &iter)) {
137 do {
(gdb) break 123
Breakpoint 1 at 0x409b00: file gnome-keyboard-properties-xkblt.c, line 123.
(gdb) run
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /usr/src/src/gnome-control-center/control-center-2.17.90/capplets/keyboard/.libs/lt-gnome-keyboard-properties
[Thread debugging using libthread_db enabled]
[New Thread 47910289698656 (LWP 29596)]
[Switching to Thread 47910289698656 (LWP 29596)]
Breakpoint 1, def_group_in_gconf_changed (client=0x64c0c0, cnxn_id=4294967295, entry=0x8c12e0, dialog=0x629100) at gnome-keyboard-properties-xkblt.c:125
125 {
(gdb) next
126 GConfValue *value = gconf_entry_get_value (entry);
(gdb) next
128 if (value->type == GCONF_VALUE_INT) {
(gdb) next
Program received signal SIGSEGV, Segmentation fault.
def_group_in_gconf_changed (client=<value optimized out>, cnxn_id=<value optimized out>, entry=<value optimized out>, dialog=0x629100) at gnome-keyboard-properties-xkblt.c:128
128 if (value->type == GCONF_VALUE_INT) {
(gdb) inspect value
$1 = (GConfValue *) 0x0
(gdb)
hggdh at xango:/usr/src/src/gnome-control-center/control-center-2.17.90/capplets/keyboard$
So, we segfaulted while testing 'value->type', and it makes sense, since
'value' is NULL.
Looking down on the code, the call to 'def_group_in_gconf_changed' is
being make in 'xkb_layouts_fill_selected_tree()'. There we see this:
gce = gconf_client_get_entry (xkb_gconf_client,
GKBD_DESKTOP_CONFIG_KEY_DEFAULT_GROUP,
NULL, TRUE, &err);
if (err == NULL) {
def_group_in_gconf_changed (xkb_gconf_client, -1, gce,
dialog);
and gce is the 'value' being passed above, and 'err' *is* NULL.
Now it is out of my depth.
--
segfault in gnome-keyboard-properties
https://launchpad.net/bugs/82373
More information about the desktop-bugs
mailing list