libsoup r1147 - in trunk: . docs/reference libsoup tests



Author: danw
Date: Sat Jul 26 14:19:18 2008
New Revision: 1147
URL: http://svn.gnome.org/viewvc/libsoup?rev=1147&view=rev

Log:
	* libsoup/soup-misc.c (soup_add_completion): Add this to schedule
	a callback in a GMainContext "right away", as opposed to
	soup_add_idle(), which uses a lower priority and therefore may not
	end up calling the callback for a long time if the application is
	busy with I/O. #536676, Benjamin Otte.

	* libsoup/soup-dns.c (resolver_thread, async_cancel)
	(soup_dns_lookup_resolve_async):
	* libsoup/soup-message-io.c (soup_message_io_unpause):
	* libsoup/soup-session-sync.c (queue_message_thread):
	* libsoup/soup-session-async.c (do_idle_run_queue):
	* libsoup/soup-socket.c (async_cancel)
	(soup_socket_connect_async):
	* tests/test-utils.c (test_server_shutdown): Use
	soup_add_completion() rather than soup_add_idle().

	* docs/reference/libsoup-2.4-sections.txt: add soup_add_completion


Modified:
   trunk/ChangeLog
   trunk/docs/reference/libsoup-2.4-sections.txt
   trunk/libsoup/soup-dns.c
   trunk/libsoup/soup-message-io.c
   trunk/libsoup/soup-misc.c
   trunk/libsoup/soup-misc.h
   trunk/libsoup/soup-session-async.c
   trunk/libsoup/soup-session-sync.c
   trunk/libsoup/soup-socket.c
   trunk/tests/test-utils.c

Modified: trunk/docs/reference/libsoup-2.4-sections.txt
==============================================================================
--- trunk/docs/reference/libsoup-2.4-sections.txt	(original)
+++ trunk/docs/reference/libsoup-2.4-sections.txt	Sat Jul 26 14:19:18 2008
@@ -563,6 +563,7 @@
 soup_str_case_equal
 soup_str_case_hash
 <SUBSECTION>
+soup_add_completion
 soup_add_idle
 soup_add_io_watch
 soup_add_timeout

Modified: trunk/libsoup/soup-dns.c
==============================================================================
--- trunk/libsoup/soup-dns.c	(original)
+++ trunk/libsoup/soup-dns.c	Sat Jul 26 14:19:18 2008
@@ -553,7 +553,7 @@
 		lookup = async_lookups->data;
 		async_lookups = g_slist_remove (async_lookups, lookup);
 
-		soup_add_idle (lookup->async_context, do_async_callback, lookup);
+		soup_add_completion (lookup->async_context, do_async_callback, lookup);
 	}
 
 	soup_dns_cache_entry_unref (entry);
@@ -633,7 +633,7 @@
 	if (g_slist_find (entry->async_lookups, lookup)) {
 		entry->async_lookups = g_slist_remove (entry->async_lookups,
 						       lookup);
-		soup_add_idle (lookup->async_context, do_async_callback, lookup);
+		soup_add_completion (lookup->async_context, do_async_callback, lookup);
 	}
 
 	g_mutex_unlock (soup_dns_lock);
@@ -680,7 +680,7 @@
 						 FALSE, NULL);
 		}
 	} else
-		soup_add_idle (lookup->async_context, do_async_callback, lookup);
+		soup_add_completion (lookup->async_context, do_async_callback, lookup);
 
 	g_mutex_unlock (soup_dns_lock);
 }

Modified: trunk/libsoup/soup-message-io.c
==============================================================================
--- trunk/libsoup/soup-message-io.c	(original)
+++ trunk/libsoup/soup-message-io.c	Sat Jul 26 14:19:18 2008
@@ -973,7 +973,7 @@
 		      NULL);
 	if (non_blocking) {
 		if (!io->unpause_source) {
-			io->unpause_source = soup_add_idle (
+			io->unpause_source = soup_add_completion (
 				async_context, io_unpause_internal, msg);
 		}
 	} else

Modified: trunk/libsoup/soup-misc.c
==============================================================================
--- trunk/libsoup/soup-misc.c	(original)
+++ trunk/libsoup/soup-misc.c	Sat Jul 26 14:19:18 2008
@@ -150,6 +150,10 @@
  * Adds an idle event as with g_idle_add(), but using the given
  * @async_context.
  *
+ * If you want @function to run "right away", use
+ * soup_add_completion(), since that sets a higher priority on the
+ * #GSource than soup_add_idle() does.
+ *
  * Return value: a #GSource, which can be removed from @async_context
  * with g_source_destroy().
  **/
@@ -165,6 +169,32 @@
 }
 
 /**
+ * soup_add_completion:
+ * @async_context: the #GMainContext to dispatch the idle event in, or
+ * %NULL for the default context
+ * @function: the callback to invoke
+ * @data: user data to pass to @function
+ *
+ * Adds @function to be executed from inside @async_context with the
+ * default priority. Use this when you want to complete an action in
+ * @async_context's main loop, as soon as possible.
+ *
+ * Return value: a #GSource, which can be removed from @async_context
+ * with g_source_destroy().
+ **/
+GSource *
+soup_add_completion (GMainContext *async_context,
+	             GSourceFunc function, gpointer data)
+{
+	GSource *source = g_idle_source_new ();
+	g_source_set_priority (source, G_PRIORITY_DEFAULT);
+	g_source_set_callback (source, function, data, NULL);
+	g_source_attach (source, async_context);
+	g_source_unref (source);
+	return source;
+}
+
+/**
  * soup_add_timeout:
  * @async_context: the #GMainContext to dispatch the timeout in, or
  * %NULL for the default context

Modified: trunk/libsoup/soup-misc.h
==============================================================================
--- trunk/libsoup/soup-misc.h	(original)
+++ trunk/libsoup/soup-misc.h	Sat Jul 26 14:19:18 2008
@@ -19,6 +19,9 @@
 GSource           *soup_add_idle             (GMainContext *async_context,
 					      GSourceFunc   function,
 					      gpointer      data);
+GSource           *soup_add_completion	     (GMainContext *async_context,
+					      GSourceFunc   function,
+					      gpointer      data);
 GSource           *soup_add_timeout          (GMainContext *async_context,
 					      guint         interval,
 					      GSourceFunc   function,

Modified: trunk/libsoup/soup-session-async.c
==============================================================================
--- trunk/libsoup/soup-session-async.c	(original)
+++ trunk/libsoup/soup-session-async.c	Sat Jul 26 14:19:18 2008
@@ -233,8 +233,8 @@
 static void
 do_idle_run_queue (SoupSession *session)
 {
-	soup_add_idle (soup_session_get_async_context (session),
-		       idle_run_queue, g_object_ref (session));
+	soup_add_completion (soup_session_get_async_context (session),
+			     idle_run_queue, g_object_ref (session));
 }
 
 static void

Modified: trunk/libsoup/soup-session-sync.c
==============================================================================
--- trunk/libsoup/soup-session-sync.c	(original)
+++ trunk/libsoup/soup-session-sync.c	Sat Jul 26 14:19:18 2008
@@ -157,8 +157,8 @@
 
 	soup_session_send_message (sad->session, sad->msg);
 	if (sad->callback) {
-		soup_add_idle (soup_session_get_async_context (sad->session),
-			       queue_message_callback, sad);
+		soup_add_completion (soup_session_get_async_context (sad->session),
+				     queue_message_callback, sad);
 	} else
 		async_data_free (sad);
 

Modified: trunk/libsoup/soup-socket.c
==============================================================================
--- trunk/libsoup/soup-socket.c	(original)
+++ trunk/libsoup/soup-socket.c	Sat Jul 26 14:19:18 2008
@@ -562,8 +562,8 @@
 	if (priv->watch_src)
 		g_source_destroy (priv->watch_src);
 	disconnect_internal (priv);
-	priv->watch_src = soup_add_idle (priv->async_context,
-					 idle_connect_result, sacd);
+	priv->watch_src = soup_add_completion (priv->async_context,
+					       idle_connect_result, sacd);
 }
 
 static guint
@@ -661,8 +661,8 @@
 						  sacd);
 		}
 	} else {
-		priv->watch_src = soup_add_idle (priv->async_context,
-						 idle_connect_result, sacd);
+		priv->watch_src = soup_add_completion (priv->async_context,
+						       idle_connect_result, sacd);
 	}
 }
 

Modified: trunk/tests/test-utils.c
==============================================================================
--- trunk/tests/test-utils.c	(original)
+++ trunk/tests/test-utils.c	Sat Jul 26 14:19:18 2008
@@ -272,8 +272,8 @@
 test_server_shutdown (void)
 {
 	if (server_thread) {
-		soup_add_idle (soup_server_get_async_context (test_server),
-			       idle_quit_server, test_server);
+		soup_add_completion (soup_server_get_async_context (test_server),
+				     idle_quit_server, test_server);
 		g_thread_join (server_thread);
 	} else
 		soup_server_quit (test_server);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]