[libsoup] websocket: add io priority paramater to soup_session_websocket_connect_async



commit c562b19dd0686d3db16d10802e3109f95603137a
Author: Carlos Garcia Campos <cgarcia igalia com>
Date:   Thu Nov 5 14:37:38 2020 +0100

    websocket: add io priority paramater to soup_session_websocket_connect_async

 libsoup/soup-message-queue.h |  1 +
 libsoup/soup-session.c       | 19 ++++++++++---------
 libsoup/soup-session.h       |  1 +
 tests/websocket-test.c       |  4 +++-
 4 files changed, 15 insertions(+), 10 deletions(-)
---
diff --git a/libsoup/soup-message-queue.h b/libsoup/soup-message-queue.h
index 58b35ac1..934b108a 100644
--- a/libsoup/soup-message-queue.h
+++ b/libsoup/soup-message-queue.h
@@ -55,6 +55,7 @@ struct _SoupMessageQueueItem {
        guint connect_only      : 1;
        guint priority          : 3;
        guint resend_count      : 5;
+       int io_priority;
 
        SoupMessageQueueItemState state;
 
diff --git a/libsoup/soup-session.c b/libsoup/soup-session.c
index b40f3af5..d2258ccd 100644
--- a/libsoup/soup-session.c
+++ b/libsoup/soup-session.c
@@ -1368,9 +1368,7 @@ tunnel_message_completed (SoupMessage *msg, SoupMessageIOCompletion completion,
 
        if (tunnel_item->async) {
                soup_connection_tunnel_handshake_async (item->conn,
-                                                       item->task ?
-                                                       g_task_get_priority (item->task) :
-                                                       G_PRIORITY_DEFAULT,
+                                                       item->io_priority,
                                                        item->cancellable,
                                                        (GAsyncReadyCallback)tunnel_handshake_complete,
                                                        tunnel_item);
@@ -1399,6 +1397,7 @@ tunnel_connect (SoupMessageQueueItem *item)
        tunnel_item = soup_session_append_queue_item (session, msg,
                                                      item->async,
                                                      NULL, NULL);
+       tunnel_item->io_priority = item->io_priority;
        tunnel_item->related = item;
        soup_message_queue_item_ref (item);
        soup_session_set_item_connection (session, tunnel_item, item->conn);
@@ -1608,9 +1607,7 @@ get_connection (SoupMessageQueueItem *item, gboolean *should_cleanup)
        if (item->async) {
                soup_message_queue_item_ref (item);
                soup_connection_connect_async (item->conn,
-                                              item->task ?
-                                              g_task_get_priority (item->task) :
-                                              G_PRIORITY_DEFAULT,
+                                              item->io_priority,
                                               item->cancellable,
                                               connect_async_complete, item);
                return FALSE;
@@ -2900,7 +2897,7 @@ send_async_maybe_complete (SoupMessageQueueItem *item,
                 */
                g_output_stream_splice_async (ostream, stream,
                                              G_OUTPUT_STREAM_SPLICE_CLOSE_TARGET,
-                                             g_task_get_priority (item->task),
+                                             item->io_priority,
                                              item->cancellable,
                                              send_async_spliced, item);
                return;
@@ -2944,7 +2941,7 @@ async_send_request_running (SoupSession *session, SoupMessageQueueItem *item)
        if (item->task) {
                item->io_started = TRUE;
                soup_message_io_run_until_read_async (item->msg,
-                                                     g_task_get_priority (item->task),
+                                                     item->io_priority,
                                                      item->cancellable,
                                                      (GAsyncReadyCallback)run_until_read_done,
                                                      item);
@@ -3119,7 +3116,7 @@ async_respond_from_cache (SoupSession          *session,
                soup_message_queue_item_ref (item);
                soup_message_disable_feature (conditional_msg, SOUP_TYPE_CACHE);
                soup_session_send_async (session, conditional_msg,
-                                        g_task_get_priority (item->task),
+                                        item->io_priority,
                                         item->cancellable,
                                         (GAsyncReadyCallback)conditional_get_ready_cb,
                                         data);
@@ -3168,6 +3165,7 @@ soup_session_send_async (SoupSession         *session,
 
        item = soup_session_append_queue_item (session, msg, TRUE,
                                               NULL, NULL);
+       item->io_priority = io_priority;
        g_signal_connect (msg, "restarted",
                          G_CALLBACK (async_send_request_restarted), item);
        g_signal_connect (msg, "finished",
@@ -4006,6 +4004,7 @@ websocket_connect_async_stop (SoupMessage *msg, gpointer user_data)
  * @origin: (allow-none): origin of the connection
  * @protocols: (allow-none) (array zero-terminated=1): a
  *   %NULL-terminated array of protocols supported
+ * @io_priority: the I/O priority of the request
  * @cancellable: a #GCancellable
  * @callback: the callback to invoke
  * @user_data: data for @callback
@@ -4036,6 +4035,7 @@ soup_session_websocket_connect_async (SoupSession          *session,
                                      SoupMessage          *msg,
                                      const char           *origin,
                                      char                **protocols,
+                                     int                   io_priority,
                                      GCancellable         *cancellable,
                                      GAsyncReadyCallback   callback,
                                      gpointer              user_data)
@@ -4063,6 +4063,7 @@ soup_session_websocket_connect_async (SoupSession          *session,
        task = g_task_new (session, cancellable, callback, user_data);
        item = soup_session_append_queue_item (session, msg, TRUE,
                                               websocket_connect_async_complete, task);
+       item->io_priority = io_priority;
        g_task_set_task_data (task, item, (GDestroyNotify) soup_message_queue_item_unref);
 
        soup_message_add_status_code_handler (msg, "got-informational",
diff --git a/libsoup/soup-session.h b/libsoup/soup-session.h
index 9dfd67e9..8b4e37f7 100644
--- a/libsoup/soup-session.h
+++ b/libsoup/soup-session.h
@@ -134,6 +134,7 @@ void                     soup_session_websocket_connect_async  (SoupSession
                                                                SoupMessage          *msg,
                                                                const char           *origin,
                                                                char                **protocols,
+                                                               int                   io_priority,
                                                                GCancellable         *cancellable,
                                                                GAsyncReadyCallback   callback,
                                                                gpointer              user_data);
diff --git a/tests/websocket-test.c b/tests/websocket-test.c
index 03a57172..ce1b9f81 100644
--- a/tests/websocket-test.c
+++ b/tests/websocket-test.c
@@ -286,6 +286,7 @@ client_connect (Test *test,
 
        soup_session_websocket_connect_async (test->session, test->msg,
                                              origin, (char **) protocols,
+                                             G_PRIORITY_DEFAULT,
                                              NULL, callback, user_data);
 }
 
@@ -458,7 +459,8 @@ test_handshake_unsupported_extension (Test *test,
         test->msg = soup_message_new ("GET", url);
         g_free (url);
 
-       soup_session_websocket_connect_async (test->session, test->msg, NULL, NULL, NULL,
+       soup_session_websocket_connect_async (test->session, test->msg, NULL, NULL,
+                                             G_PRIORITY_DEFAULT, NULL,
                                              got_client_connection, test);
        WAIT_UNTIL (test->server != NULL);
        WAIT_UNTIL (test->msg == NULL);


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