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:

[EMAIL 
PROTECTED]:/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) 
[EMAIL 
PROTECTED]:/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

-- 
desktop-bugs mailing list
desktop-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/desktop-bugs

Reply via email to