soup-message-queue: hold a reference to the async context
authorSergio Villar Senin <svillar@igalia.com>
Mon, 4 Mar 2013 10:26:17 +0000 (11:26 +0100)
committerSergio Villar Senin <svillar@igalia.com>
Mon, 4 Mar 2013 14:36:13 +0000 (15:36 +0100)
This will ensure that the GMainContext is not freed at least until we get
rid of the queue item. This was causing crashes when synchronously
retrieving resources in WebKit as it uses a different GMainContext for each
of those synchronous requests.

https://bugzilla.gnome.org/show_bug.cgi?id=694920

libsoup/soup-message-queue.c

index c7661d8..8b1ebaf 100644 (file)
@@ -82,6 +82,8 @@ soup_message_queue_append (SoupMessageQueue *queue, SoupMessage *msg,
        item = g_slice_new0 (SoupMessageQueueItem);
        item->session = g_object_ref (queue->session);
        item->async_context = soup_session_get_async_context (item->session);
+       if (item->async_context)
+               g_main_context_ref (item->async_context);
        item->queue = queue;
        item->msg = g_object_ref (msg);
        item->callback = callback;
@@ -163,6 +165,7 @@ soup_message_queue_item_unref (SoupMessageQueueItem *item)
        g_object_unref (item->msg);
        g_object_unref (item->cancellable);
        g_clear_object (&item->task);
+       g_clear_pointer (&item->async_context, g_main_context_unref);
        if (item->io_source) {
                g_source_destroy (item->io_source);
                g_source_unref (item->io_source);