diff options
author | Dan Winship <danw@gnome.org> | 2012-05-27 11:30:03 -0400 |
---|---|---|
committer | Dan Winship <danw@gnome.org> | 2012-07-16 12:08:19 -0400 |
commit | d167a72774417278e1175f532aa83059c28c8b0c (patch) | |
tree | ff39a22a6149dcc9e1de6d4adbbe94a2c81ea583 | |
parent | acc39b2e08cc8f8f729fd111c686168b4788a4c3 (diff) | |
download | libsoup-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.c | 5 | ||||
-rw-r--r-- | libsoup/soup-session-private.h | 4 | ||||
-rw-r--r-- | libsoup/soup-session-sync.c | 19 | ||||
-rw-r--r-- | 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 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; |