[libsoup] SoupSession: replace queue_message() base impl with a separate method



commit d167a72774417278e1175f532aa83059c28c8b0c
Author: Dan Winship <danw gnome org>
Date:   Sun May 27 11:30:03 2012 -0400

    SoupSession: replace queue_message() base impl with a separate method
    
    Create soup_session_append_queue_item() to do what the base
    implementation of queue_message() did, and use that from various
    places that used to call the base queue_message() directly.

 libsoup/soup-session-async.c   |    5 ++-
 libsoup/soup-session-private.h |    4 ++
 libsoup/soup-session-sync.c    |   19 ++---------
 libsoup/soup-session.c         |   64 +++++++++++++++++----------------------
 4 files changed, 40 insertions(+), 52 deletions(-)
---
diff --git a/libsoup/soup-session-async.c b/libsoup/soup-session-async.c
index ad006ee..5a45b23 100644
--- a/libsoup/soup-session-async.c
+++ b/libsoup/soup-session-async.c
@@ -397,7 +397,10 @@ static void
 soup_session_async_queue_message (SoupSession *session, SoupMessage *req,
 				  SoupSessionCallback callback, gpointer user_data)
 {
-	SOUP_SESSION_CLASS (soup_session_async_parent_class)->queue_message (session, req, callback, user_data);
+	SoupMessageQueueItem *item;
+
+	item = soup_session_append_queue_item (session, req, callback, user_data);
+	soup_message_queue_item_unref (item);
 
 	do_idle_run_queue (session);
 }
diff --git a/libsoup/soup-session-private.h b/libsoup/soup-session-private.h
index a72fb2b..b5e24e3 100644
--- a/libsoup/soup-session-private.h
+++ b/libsoup/soup-session-private.h
@@ -15,6 +15,10 @@ G_BEGIN_DECLS
 /* "protected" methods for subclasses */
 SoupMessageQueue     *soup_session_get_queue            (SoupSession          *session);
 
+SoupMessageQueueItem *soup_session_append_queue_item    (SoupSession          *session,
+							 SoupMessage          *msg,
+							 SoupSessionCallback   callback,
+							 gpointer              user_data);
 SoupMessageQueueItem *soup_session_make_connect_message (SoupSession          *session,
 							 SoupConnection       *conn);
 gboolean              soup_session_get_connection       (SoupSession          *session,
diff --git a/libsoup/soup-session-sync.c b/libsoup/soup-session-sync.c
index 1284176..b86a6ca 100644
--- a/libsoup/soup-session-sync.c
+++ b/libsoup/soup-session-sync.c
@@ -328,12 +328,8 @@ soup_session_sync_queue_message (SoupSession *session, SoupMessage *msg,
 	SoupMessageQueueItem *item;
 	GThread *thread;
 
-	SOUP_SESSION_CLASS (soup_session_sync_parent_class)->
-		queue_message (g_object_ref (session), msg, callback, user_data);
-
-	item = soup_message_queue_lookup (soup_session_get_queue (session), msg);
-	g_return_if_fail (item != NULL);
-
+	g_object_ref (session);
+	item = soup_session_append_queue_item (session, msg, callback, user_data);
 	thread = g_thread_new ("SoupSessionSync:queue_message",
 			       queue_message_thread, item);
 	g_thread_unref (thread);
@@ -345,11 +341,7 @@ soup_session_sync_send_message (SoupSession *session, SoupMessage *msg)
 	SoupMessageQueueItem *item;
 	guint status;
 
-	SOUP_SESSION_CLASS (soup_session_sync_parent_class)->queue_message (session, msg, NULL, NULL);
-
-	item = soup_message_queue_lookup (soup_session_get_queue (session), msg);
-	g_return_val_if_fail (item != NULL, SOUP_STATUS_MALFORMED);
-
+	item = soup_session_append_queue_item (session, msg, NULL, NULL);
 	process_queue_item (item);
 	status = msg->status_code;
 	soup_message_queue_item_unref (item);
@@ -475,10 +467,7 @@ soup_session_send_request (SoupSession   *session,
 
 	g_return_val_if_fail (SOUP_IS_SESSION_SYNC (session), NULL);
 
-	SOUP_SESSION_CLASS (soup_session_sync_parent_class)->queue_message (session, msg, NULL, NULL);
-
-	item = soup_message_queue_lookup (soup_session_get_queue (session), msg);
-	g_return_val_if_fail (item != NULL, NULL);
+	item = soup_session_append_queue_item (session, msg, NULL, NULL);
 
 	item->new_api = TRUE;
 	if (cancellable) {
diff --git a/libsoup/soup-session.c b/libsoup/soup-session.c
index bcd0be9..7624afb 100644
--- a/libsoup/soup-session.c
+++ b/libsoup/soup-session.c
@@ -117,10 +117,6 @@ static void auth_manager_authenticate (SoupAuthManager *manager,
 				       SoupMessage *msg, SoupAuth *auth,
 				       gboolean retrying, gpointer user_data);
 
-static void soup_session_real_queue_message (SoupSession *session, SoupMessage *msg,
-					     SoupSessionCallback callback,
-					     gpointer user_data);
-
 #define SOUP_SESSION_MAX_CONNS_DEFAULT 10
 #define SOUP_SESSION_MAX_CONNS_PER_HOST_DEFAULT 2
 
@@ -1014,6 +1010,33 @@ redirect_handler (SoupMessage *msg, gpointer user_data)
 	soup_session_redirect_message (session, msg);
 }
 
+SoupMessageQueueItem *
+soup_session_append_queue_item (SoupSession *session, SoupMessage *msg,
+				SoupSessionCallback callback, gpointer user_data)
+{
+	SoupSessionPrivate *priv = SOUP_SESSION_GET_PRIVATE (session);
+	SoupMessageQueueItem *item;
+	SoupSessionHost *host;
+
+	item = soup_message_queue_append (priv->queue, msg, callback, user_data);
+
+	g_mutex_lock (&priv->host_lock);
+	host = get_host_for_message (session, item->msg);
+	host->num_messages++;
+	g_mutex_unlock (&priv->host_lock);
+
+	if (!(soup_message_get_flags (msg) & SOUP_MESSAGE_NO_REDIRECT)) {
+		soup_message_add_header_handler (
+			msg, "got_body", "Location",
+			G_CALLBACK (redirect_handler), item);
+	}
+
+	g_signal_emit (session, signals[REQUEST_QUEUED], 0, msg);
+
+	soup_message_queue_item_ref (item);
+	return item;
+}
+
 void
 soup_session_send_queue_item (SoupSession *session,
 			      SoupMessageQueueItem *item,
@@ -1148,7 +1171,6 @@ SoupMessageQueueItem *
 soup_session_make_connect_message (SoupSession    *session,
 				   SoupConnection *conn)
 {
-	SoupSessionPrivate *priv = SOUP_SESSION_GET_PRIVATE (session);
 	SoupURI *uri;
 	SoupMessage *msg;
 	SoupMessageQueueItem *item;
@@ -1157,12 +1179,7 @@ soup_session_make_connect_message (SoupSession    *session,
 	msg = soup_message_new_from_uri (SOUP_METHOD_CONNECT, uri);
 	soup_message_set_flags (msg, SOUP_MESSAGE_NO_REDIRECT);
 
-	/* Call the base implementation of soup_session_queue_message
-	 * directly, to add msg to the SoupMessageQueue and cause all
-	 * the right signals to be emitted.
-	 */
-	soup_session_real_queue_message (session, msg, NULL, NULL);
-	item = soup_message_queue_lookup (priv->queue, msg);
+	item = soup_session_append_queue_item (session, msg, NULL, NULL);
 	soup_message_queue_item_set_connection (item, conn);
 	g_object_unref (msg);
 	item->state = SOUP_MESSAGE_RUNNING;
@@ -1352,30 +1369,6 @@ soup_session_set_item_status (SoupSession          *session,
 	}
 }
 
-static void
-soup_session_real_queue_message (SoupSession *session, SoupMessage *msg,
-				 SoupSessionCallback callback, gpointer user_data)
-{
-	SoupSessionPrivate *priv = SOUP_SESSION_GET_PRIVATE (session);
-	SoupMessageQueueItem *item;
-	SoupSessionHost *host;
-
-	item = soup_message_queue_append (priv->queue, msg, callback, user_data);
-
-	g_mutex_lock (&priv->host_lock);
-	host = get_host_for_message (session, item->msg);
-	host->num_messages++;
-	g_mutex_unlock (&priv->host_lock);
-
-	if (!(soup_message_get_flags (msg) & SOUP_MESSAGE_NO_REDIRECT)) {
-		soup_message_add_header_handler (
-			msg, "got_body", "Location",
-			G_CALLBACK (redirect_handler), item);
-	}
-
-	g_signal_emit (session, signals[REQUEST_QUEUED], 0, msg);
-}
-
 /**
  * SoupSessionCallback:
  * @session: the session
@@ -1985,7 +1978,6 @@ soup_session_class_init (SoupSessionClass *session_class)
 	g_type_class_add_private (session_class, sizeof (SoupSessionPrivate));
 
 	/* virtual method definition */
-	session_class->queue_message = soup_session_real_queue_message;
 	session_class->requeue_message = soup_session_real_requeue_message;
 	session_class->cancel_message = soup_session_real_cancel_message;
 	session_class->auth_required = soup_session_real_auth_required;



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