[libsoup] session: use g_queue_foreach in async_run_queue
- From: Carlos Garcia Campos <carlosgc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libsoup] session: use g_queue_foreach in async_run_queue
- Date: Wed, 12 May 2021 09:01:55 +0000 (UTC)
commit c3e90786534b5529564543265be2888db2ec2450
Author: Carlos Garcia Campos <cgarcia igalia com>
Date: Wed May 12 11:00:09 2021 +0200
session: use g_queue_foreach in async_run_queue
Items can be removed from the queue while iterating, so a for loop is
not safe.
libsoup/soup-session.c | 31 +++++++++++++++----------------
1 file changed, 15 insertions(+), 16 deletions(-)
---
diff --git a/libsoup/soup-session.c b/libsoup/soup-session.c
index 9be57b21..d2dccae9 100644
--- a/libsoup/soup-session.c
+++ b/libsoup/soup-session.c
@@ -1997,32 +1997,31 @@ soup_session_process_queue_item (SoupSession *session,
} while (loop && item->state != SOUP_MESSAGE_FINISHED);
}
+static void
+process_queue_item (SoupMessageQueueItem *item,
+ gboolean *should_cleanup)
+{
+ if (!item->async)
+ return;
+
+ /* CONNECT messages are handled specially */
+ if (soup_message_get_method (item->msg) == SOUP_METHOD_CONNECT)
+ return;
+
+ soup_session_process_queue_item (item->session, item, should_cleanup, TRUE);
+}
+
static void
async_run_queue (SoupSession *session)
{
SoupSessionPrivate *priv = soup_session_get_instance_private (session);
- SoupMessageQueueItem *item;
- SoupMessage *msg;
gboolean try_cleanup = TRUE, should_cleanup = FALSE;
- GList *l;
g_object_ref (session);
soup_session_cleanup_connections (session, FALSE);
try_again:
- for (l = priv->queue->head; l && l->data; l = g_list_next (l)) {
- item = (SoupMessageQueueItem *)l->data;
- msg = item->msg;
-
- /* CONNECT messages are handled specially */
- if (soup_message_get_method (msg) == SOUP_METHOD_CONNECT)
- continue;
-
- if (!item->async)
- continue;
-
- soup_session_process_queue_item (session, item, &should_cleanup, TRUE);
- }
+ g_queue_foreach (priv->queue, (GFunc)process_queue_item, &should_cleanup);
if (try_cleanup && should_cleanup) {
/* There is at least one message in the queue that
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]