[libsoup/carlosgc/session-queue-source: 4/4] session: do not kick the queue if there isn't any async item




commit 27996cc63b5ec4d6a1f4d62b1f1b8ffc0eb422bb
Author: Carlos Garcia Campos <cgarcia igalia com>
Date:   Fri Oct 14 10:59:59 2022 +0200

    session: do not kick the queue if there isn't any async item

 libsoup/soup-session.c | 10 ++++++++++
 1 file changed, 10 insertions(+)
---
diff --git a/libsoup/soup-session.c b/libsoup/soup-session.c
index b09fd6a8..8b668036 100644
--- a/libsoup/soup-session.c
+++ b/libsoup/soup-session.c
@@ -86,6 +86,7 @@ typedef struct {
        GQueue *queue;
         GMutex queue_sources_mutex;
        GHashTable *queue_sources;
+        gint num_async_items;
         guint in_async_run_queue;
         gboolean needs_queue_sort;
 
@@ -1338,6 +1339,9 @@ soup_session_append_queue_item (SoupSession        *session,
 
         soup_session_add_queue_source_for_item (session, item);
 
+        if (async)
+                g_atomic_int_inc (&priv->num_async_items);
+
        if (!soup_message_query_flags (msg, SOUP_MESSAGE_NO_REDIRECT)) {
                soup_message_add_header_handler (
                        msg, "got_body", "Location",
@@ -1426,6 +1430,9 @@ soup_session_unqueue_item (SoupSession          *session,
 
         soup_session_remove_queue_source_for_item (session, item);
 
+        if (item->async)
+                g_atomic_int_dec_and_test (&priv->num_async_items);
+
        /* g_signal_handlers_disconnect_by_func doesn't work if you
         * have a metamarshal, meaning it doesn't work with
         * soup_message_add_header_handler()
@@ -1911,6 +1918,9 @@ soup_session_kick_queue (SoupSession *session)
 {
        SoupSessionPrivate *priv = soup_session_get_instance_private (session);
 
+        if (g_atomic_int_get (&priv->num_async_items) <= 0)
+                return;
+
         g_mutex_lock (&priv->queue_sources_mutex);
         if (priv->queue_sources)
                 g_hash_table_foreach (priv->queue_sources, (GHFunc)kick_queue_source, NULL);


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