diff options
author | Bastien Nocera <hadess@hadess.net> | 2012-03-27 13:44:44 +0200 |
---|---|---|
committer | Bastien Nocera <hadess@hadess.net> | 2012-03-27 13:49:54 +0200 |
commit | ee3f0720f2a22c9e829ba114713bfaf5b97cc8e2 (patch) | |
tree | 999a47bde2962375e5bc2f373f05d87749d4a5b9 | |
parent | 49ec6af014326efd0001dd1531d5b09cf22d2121 (diff) | |
download | gnome-control-center-ee3f0720f2a22c9e829ba114713bfaf5b97cc8e2.tar.gz |
common: Fix crash when filtering language list
And it's still being populated. If the list gets filtered
while it's being populated, we would end up with a row with NULL
data, causing us to crash.
Make sure to hold the GDK threads lock when reading from the list,
to avoid racing with the insert code.
http://bugzilla.gnome.org/show_bug.cgi?id=672293
-rw-r--r-- | panels/common/cc-language-chooser.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/panels/common/cc-language-chooser.c b/panels/common/cc-language-chooser.c index 6f8e9ff00..b2f692d97 100644 --- a/panels/common/cc-language-chooser.c +++ b/panels/common/cc-language-chooser.c @@ -46,10 +46,13 @@ cc_language_chooser_get_language (GtkWidget *chooser) tv = (GtkTreeView *) g_object_get_data (G_OBJECT (chooser), "list"); selection = gtk_tree_view_get_selection (tv); + + gdk_threads_enter (); if (gtk_tree_selection_get_selected (selection, &model, &iter)) gtk_tree_model_get (model, &iter, LOCALE_COL, &lang, -1); else lang = NULL; + gdk_threads_leave (); return lang; } @@ -245,7 +248,10 @@ filter_languages (GtkTreeModel *model, return TRUE; } + gdk_threads_enter (); gtk_tree_model_get (model, iter, DISPLAY_LOCALE_COL, &locale, -1); + gdk_threads_leave (); + l = g_utf8_casefold (locale, -1); visible = strstr (l, filter_string) != NULL; |