summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Winship <danw@gnome.org>2012-05-27 11:30:03 -0400
committerDan Winship <danw@gnome.org>2012-07-16 12:08:19 -0400
commitd167a72774417278e1175f532aa83059c28c8b0c (patch)
treeff39a22a6149dcc9e1de6d4adbbe94a2c81ea583
parentacc39b2e08cc8f8f729fd111c686168b4788a4c3 (diff)
downloadlibsoup-d167a72774417278e1175f532aa83059c28c8b0c.tar.gz
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.
-rw-r--r--libsoup/soup-session-async.c5
-rw-r--r--libsoup/soup-session-private.h4
-rw-r--r--libsoup/soup-session-sync.c19
-rw-r--r--libsoup/soup-session.c64
4 files changed, 40 insertions, 52 deletions
diff --git a/libsoup/soup-session-async.c b/libsoup/soup-session-async.c
index ad006ee8..5a45b23c 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 a72fb2b4..b5e24e33 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 12841764..b86a6ca5 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 bcd0be90..7624afb3 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;