From 6c24fd0e6d3d6a1b18829e72e2508ad6fcf6f9e7 Mon Sep 17 00:00:00 2001 From: Sergio Villar Senin Date: Mon, 4 Mar 2013 11:26:17 +0100 Subject: [PATCH] soup-message-queue: hold a reference to the async context 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 | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libsoup/soup-message-queue.c b/libsoup/soup-message-queue.c index c7661d8..8b1ebaf 100644 --- a/libsoup/soup-message-queue.c +++ b/libsoup/soup-message-queue.c @@ -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); -- 2.7.4