summaryrefslogtreecommitdiff
path: root/src/trg-peers-model.c
diff options
context:
space:
mode:
authorGravatar Alan Fitton <ajf@eth0.org.uk>2012-09-01 11:31:26 +0100
committerGravatar Alan Fitton <ajf@eth0.org.uk>2012-09-01 11:31:26 +0100
commit53222b1c536bdb612e15cccd60dcadf6b4ac3957 (patch)
tree9c45406c58043b6f061c97970bd049691d04ade5 /src/trg-peers-model.c
parenteb4cd8426cce8311c0d71767bd90491eb4df6d0b (diff)
use g_idle_add instead of gdk_thread_enter/leave when setting reverse DNS results.
Diffstat (limited to 'src/trg-peers-model.c')
-rw-r--r--src/trg-peers-model.c63
1 files changed, 38 insertions, 25 deletions
diff --git a/src/trg-peers-model.c b/src/trg-peers-model.c
index 3c81f95..5e79232 100644
--- a/src/trg-peers-model.c
+++ b/src/trg-peers-model.c
@@ -95,35 +95,48 @@ find_existing_peer_item(TrgPeersModel * model, JsonObject * p,
return pi.found;
}
-static void
-resolved_dns_cb(GObject * source_object, GAsyncResult * res, gpointer data)
-{
- GtkTreeRowReference *treeRef;
- GtkTreeModel *model;
- GtkTreePath *path;
-
- treeRef = (GtkTreeRowReference *) data;
- model = gtk_tree_row_reference_get_model(treeRef);
- path = gtk_tree_row_reference_get_path(treeRef);
-
- if (path != NULL) {
- gchar *rdns =
- g_resolver_lookup_by_address_finish(G_RESOLVER(source_object),
- res, NULL);
- if (rdns != NULL) {
- GtkTreeIter iter;
- if (gtk_tree_model_get_iter(model, &iter, path) == TRUE) {
- gdk_threads_enter();
- gtk_list_store_set(GTK_LIST_STORE(model), &iter,
- PEERSCOL_HOST, rdns, -1);
- gdk_threads_leave();
- }
- g_free(rdns);
+struct ResolvedDnsIdleData {
+ GtkTreeRowReference *rowRef;
+ gchar *rdns;
+};
+
+static gboolean resolved_dns_idle_cb(gpointer data) {
+ struct ResolvedDnsIdleData *idleData = data;
+ GtkTreeModel *model = gtk_tree_row_reference_get_model(idleData->rowRef);
+ GtkTreePath *path = gtk_tree_row_reference_get_path(idleData->rowRef);
+
+ if (path != NULL ) {
+ GtkTreeIter iter;
+ if (gtk_tree_model_get_iter(model, &iter, path) == TRUE) {
+ gtk_list_store_set(GTK_LIST_STORE(model), &iter, PEERSCOL_HOST,
+ idleData->rdns, -1);
}
gtk_tree_path_free(path);
}
- gtk_tree_row_reference_free(treeRef);
+ gtk_tree_row_reference_free(idleData->rowRef);
+ g_free(idleData->rdns);
+ g_free(idleData);
+
+ return FALSE;
+}
+
+static void resolved_dns_cb(GObject * source_object, GAsyncResult * res,
+ gpointer data) {
+
+ gchar *rdns = g_resolver_lookup_by_address_finish(G_RESOLVER(source_object),
+ res, NULL );
+ GtkTreeRowReference *rowRef = data;
+
+ if (rdns != NULL) {
+ struct ResolvedDnsIdleData *idleData =
+ g_new(struct ResolvedDnsIdleData, 1);
+ idleData->rdns = rdns;
+ idleData->rowRef = rowRef;
+ g_idle_add(resolved_dns_idle_cb, idleData);
+ } else {
+ gtk_tree_row_reference_free(rowRef);
+ }
}
void