[libsoup/gresolver] Update SoupAddress to use g_main_context_push/pop_thread_default()
- From: Dan Winship <danw src gnome org>
- To: svn-commits-list gnome org
- Subject: [libsoup/gresolver] Update SoupAddress to use g_main_context_push/pop_thread_default()
- Date: Sun, 28 Jun 2009 14:05:36 +0000 (UTC)
commit d39f333e98c1e62e2527ad13e89c9a5d468dadeb
Author: Dan Winship <danw gnome org>
Date: Tue Jun 23 12:05:45 2009 -0400
Update SoupAddress to use g_main_context_push/pop_thread_default()
libsoup/soup-address.c | 46 ++++++----------------------------------------
1 files changed, 6 insertions(+), 40 deletions(-)
---
diff --git a/libsoup/soup-address.c b/libsoup/soup-address.c
index 947c523..6b9bc03 100644
--- a/libsoup/soup-address.c
+++ b/libsoup/soup-address.c
@@ -660,37 +660,6 @@ idle_complete_resolve (gpointer res_data)
return FALSE;
}
-static void
-resolve_for_context (gpointer thread_data, gpointer pool_data)
-{
- SoupAddressResolveAsyncData *res_data = thread_data;
-
- res_data->status =
- soup_address_resolve_sync (res_data->addr,
- res_data->cancellable);
- soup_add_completion (res_data->async_context,
- idle_complete_resolve, res_data);
-}
-
-static void
-resolve_in_thread (SoupAddressResolveAsyncData *res_data,
- GMainContext *async_context, GCancellable *cancellable)
-{
- static volatile GThreadPool *thread_pool = NULL;
-
- if (g_once_init_enter ((gsize *)&thread_pool)) {
- GThreadPool *pool = g_thread_pool_new (resolve_for_context,
- NULL, -1, FALSE, NULL);
- g_once_init_leave ((gsize *)&thread_pool,
- GPOINTER_TO_SIZE (pool));
- }
-
- res_data->async_context = g_main_context_ref (async_context);
- if (cancellable)
- res_data->cancellable = g_object_ref (cancellable);
- g_thread_pool_push ((GThreadPool *)thread_pool, res_data, NULL);
-}
-
/**
* SoupAddressCallback:
* @addr: the #SoupAddress that was resolved
@@ -743,17 +712,11 @@ soup_address_resolve_async (SoupAddress *addr, GMainContext *async_context,
return;
}
- /* GResolver doesn't (yet!) do non-default contexts, so to
- * support that we need to synchronously resolve in another
- * thread and then send the answer back to the right context.
- */
- if (async_context && async_context != g_main_context_default ()) {
- resolve_in_thread (res_data, async_context, cancellable);
- return;
- }
-
resolver = g_resolver_get_default ();
+ if (async_context && async_context != g_main_context_default ())
+ g_main_context_push_thread_default (async_context);
+
if (priv->name) {
res_data->lookup_name = TRUE;
g_resolver_lookup_by_name_async (resolver, priv->name,
@@ -770,6 +733,9 @@ soup_address_resolve_async (SoupAddress *addr, GMainContext *async_context,
g_object_unref (gia);
}
+ if (async_context && async_context != g_main_context_default ())
+ g_main_context_push_thread_default (async_context);
+
g_object_unref (resolver);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]