So, I'm seeing these invalid reads in the keyboard plugin: ==4294== Invalid read of size 1 ==4294== at 0x4C29732: strcmp (mc_replace_strmem.c:426) ==4294== by 0x640AD28: g_str_equal (gstring.c:115) ==4294== by 0x63D7E6A: g_hash_table_insert_internal (ghash.c:401) ==4294== by 0x13BE70E5: popup_menu_set_group (gsd-keyboard-xkb.c:376) ==4294== by 0x13BE7C84: apply_xkb_settings (gsd-keyboard-xkb.c:543) ==4294== by 0x13BE8377: gsd_keyboard_xkb_init (gsd-keyboard-xkb.c:1123) ==4294== by 0x13BE651A: start_keyboard_idle_cb (gsd-keyboard-manager.c:399) ==4294== by 0x63E67E1: g_main_context_dispatch (gmain.c:2119) ==4294== by 0x63EA747: g_main_context_iterate (gmain.c:2750) ==4294== by 0x63EAC54: g_main_loop_run (gmain.c:2958) ==4294== by 0x4F7AA46: gtk_main (gtkmain.c:1237) ==4294== by 0x404299: main (main.c:502) ==4294== Address 0x1aa7d3a1 is 1 bytes inside a block of size 4 free'd ==4294== at 0x4C27D71: free (vg_replace_malloc.c:366) ==4294== by 0x13BE7104: popup_menu_set_group (gsd-keyboard-xkb.c:392) ==4294== by 0x13BE7C84: apply_xkb_settings (gsd-keyboard-xkb.c:543) ==4294== by 0x13BE8377: gsd_keyboard_xkb_init (gsd-keyboard-xkb.c:1123) ==4294== by 0x13BE651A: start_keyboard_idle_cb (gsd-keyboard-manager.c:399) ==4294== by 0x63E67E1: g_main_context_dispatch (gmain.c:2119) ==4294== by 0x63EA747: g_main_context_iterate (gmain.c:2750) ==4294== by 0x63EAC54: g_main_loop_run (gmain.c:2958) ==4294== by 0x4F7AA46: gtk_main (gtkmain.c:1237) ==4294== by 0x404299: main (main.c:502)
It is most likely the key for that particular node pointing to free'd memory. This is happening here in popup_menu_set_group: for (g = 0; g < g_strv_length (shortnames);g++) { gpointer pcounter = NULL; gchar *prev_layout_name = NULL; int counter = 0; if (g < g_strv_length (shortnames)) { if (xkl_engine_get_features (engine) & XKLF_MULTIPLE_LAYOUTS_SUPPORTED) { gchar *longname = (gchar *) g_slist_nth_data (current_kbd_config.layouts_variants, g); gchar *variant_name; if (!gkbd_keyboard_config_split_items (longname, &lname, &variant_name)) /* just in case */ lname = longname; /* make it freeable */ lname = g_strdup (lname); if (shortnames != NULL) { gchar *shortname = shortnames[g]; if (shortname != NULL && *shortname != '\0') { /* drop the long name */ g_free (lname); lname = g_strdup (shortname); } } } else { lname = g_strdup (longnames[g]); } } if (lname == NULL) lname = g_strdup (""); /* Process layouts with repeating description */ if (g_hash_table_lookup_extended (ln2cnt_map, lname, (gpointer *) & prev_layout_name, &pcounter)) { /* "next" same description */ counter = GPOINTER_TO_INT (pcounter); guide = "XXX1"; } 1--> g_hash_table_insert (ln2cnt_map, lname, GINT_TO_POINTER (counter+1)); if (st->group == g) { if (counter > 0) { gchar appendix[10] = ""; gint utf8length; gunichar cidx; /* Unicode subscript 2, 3, 4 */ cidx = 0x2081 + counter; utf8length = g_unichar_to_utf8 (cidx, appendix); appendix[utf8length] = '\0'; layout_name = g_strconcat (lname, appendix, NULL); } else { layout_name = g_strdup(lname); } } 2--> g_free(lname); } So, at 2), the key "lname" is being free'd after it was previously inserted in to the hash table (1), leaving a hash table full of nodes with keys pointing to free'd memory regions -- gnome-settings-daemon crashed with signal 5 in gkbd_keyboard_drawing_new_dialog() https://bugs.launchpad.net/bugs/630239 You received this bug notification because you are a member of Ubuntu Desktop Bugs, which is subscribed to gnome-settings-daemon in ubuntu. -- desktop-bugs mailing list desktop-bugs@lists.ubuntu.com https://lists.ubuntu.com/mailman/listinfo/desktop-bugs