diff options
author | Carlos Garcia Campos <cgarcia@igalia.com> | 2021-02-26 13:27:28 +0100 |
---|---|---|
committer | Carlos Garcia Campos <cgarcia@igalia.com> | 2021-02-26 13:37:50 +0100 |
commit | 077d518d2c993ea5c605453731399dc1d556a0f3 (patch) | |
tree | 59d6b6777d497d7e50e1eed5d61ea593bc75b478 /libsoup/soup-message-queue-item.c | |
parent | 69dc2314e881487cbf8147f6c48b9e8d2e258358 (diff) | |
download | libsoup-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.c | 73 |
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); +} |