diff options
-rw-r--r-- | libsoup/soup-session.c | 10 |
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); |