summaryrefslogtreecommitdiff
path: root/libsoup/soup-message-queue-item.c
diff options
context:
space:
mode:
authorCarlos Garcia Campos <cgarcia@igalia.com>2021-02-26 13:27:28 +0100
committerCarlos Garcia Campos <cgarcia@igalia.com>2021-02-26 13:37:50 +0100
commit077d518d2c993ea5c605453731399dc1d556a0f3 (patch)
tree59d6b6777d497d7e50e1eed5d61ea593bc75b478 /libsoup/soup-message-queue-item.c
parent69dc2314e881487cbf8147f6c48b9e8d2e258358 (diff)
downloadlibsoup-carlosgc/session-queue.tar.gz
Remove SoupMessageQueuecarlosgc/session-queue
We can just use a GQueue instead now that we don't try to support multiple threads
Diffstat (limited to 'libsoup/soup-message-queue-item.c')
-rw-r--r--libsoup/soup-message-queue-item.c73
1 files changed, 73 insertions, 0 deletions
diff --git a/libsoup/soup-message-queue-item.c b/libsoup/soup-message-queue-item.c
new file mode 100644
index 00000000..4097dd2b
--- /dev/null
+++ b/libsoup/soup-message-queue-item.c
@@ -0,0 +1,73 @@
+/*
+ * soup-message-queue-item.c: Message queue item
+ *
+ * Copyright (C) 2003 Novell, Inc.
+ * Copyright (C) 2008 Red Hat, Inc.
+ * Copyright (C) 2021 Igalia S.L.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "soup-message-queue-item.h"
+#include "soup.h"
+
+SoupMessageQueueItem *
+soup_message_queue_item_new (SoupSession *session,
+ SoupMessage *msg,
+ gboolean async,
+ GCancellable *cancellable,
+ SoupSessionCallback callback,
+ gpointer user_data)
+{
+ SoupMessageQueueItem *item;
+
+ item = g_atomic_rc_box_new0 (SoupMessageQueueItem);
+ item->session = g_object_ref (session);
+ item->msg = g_object_ref (msg);
+ item->async = async;
+ item->callback = callback;
+ item->callback_data = user_data;
+ item->cancellable = cancellable ? g_object_ref (cancellable) : g_cancellable_new ();
+ item->priority = soup_message_get_priority (msg);
+
+ g_signal_connect_swapped (msg, "restarted",
+ G_CALLBACK (g_cancellable_reset),
+ item->cancellable);
+ return item;
+}
+
+SoupMessageQueueItem *
+soup_message_queue_item_ref (SoupMessageQueueItem *item)
+{
+ g_atomic_rc_box_acquire (item);
+
+ return item;
+}
+
+static void
+soup_message_queue_item_destroy (SoupMessageQueueItem *item)
+{
+ g_warn_if_fail (item->conn == NULL);
+
+ g_signal_handlers_disconnect_by_data (item->msg, item->cancellable);
+
+ g_object_unref (item->session);
+ g_object_unref (item->msg);
+ g_object_unref (item->cancellable);
+ g_clear_error (&item->error);
+ g_clear_object (&item->task);
+}
+
+void
+soup_message_queue_item_unref (SoupMessageQueueItem *item)
+{
+ g_atomic_rc_box_release_full (item, (GDestroyNotify)soup_message_queue_item_destroy);
+}
+
+void
+soup_message_queue_item_cancel (SoupMessageQueueItem *item)
+{
+ g_cancellable_cancel (item->cancellable);
+}