summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Garcia Campos <cgarcia@igalia.com>2022-10-14 10:59:59 +0200
committerCarlos Garcia Campos <cgarcia@igalia.com>2022-10-14 13:10:35 +0200
commit1d5b651ff5364f0024903cf2b0ef6a4e3d7258ef (patch)
treedaf34cfb57ba5592c0cd61de5c586c8dd64d6ac0
parent998dff04cb559fbc3688cc8d3392c8fecc854201 (diff)
downloadlibsoup-1d5b651ff5364f0024903cf2b0ef6a4e3d7258ef.tar.gz
session: do not kick the queue if there isn't any async item
-rw-r--r--libsoup/soup-session.c10
1 files changed, 10 insertions, 0 deletions
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);