summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien Nocera <hadess@hadess.net>2012-03-27 13:44:44 +0200
committerBastien Nocera <hadess@hadess.net>2012-03-27 13:49:54 +0200
commitee3f0720f2a22c9e829ba114713bfaf5b97cc8e2 (patch)
tree999a47bde2962375e5bc2f373f05d87749d4a5b9
parent49ec6af014326efd0001dd1531d5b09cf22d2121 (diff)
downloadgnome-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.c6
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;