[ostree] pull: Push a temporary main context for sync requests



commit f0b143ca8ac689818a1fe4b1960a16b82a68a843
Author: Matthew Barnes <mbarnes redhat com>
Date:   Fri Nov 13 20:37:13 2015 -0500

    pull: Push a temporary main context for sync requests
    
    Given the previous commit, which isolates SoupSession in a separate
    thread, it should be safe to start pushing a temporary main context
    for synchronous requests again.
    
    This partially reverts 84fe2ff, which partially reverted 9f3d586.
    
    Related to https://bugzilla.gnome.org/show_bug.cgi?id=753336

 src/libostree/ostree-fetcher.c  |    9 ++++-----
 src/libostree/ostree-metalink.c |   10 ++++------
 2 files changed, 8 insertions(+), 11 deletions(-)
---
diff --git a/src/libostree/ostree-fetcher.c b/src/libostree/ostree-fetcher.c
index 2964a1a..8f10308 100644
--- a/src/libostree/ostree-fetcher.c
+++ b/src/libostree/ostree-fetcher.c
@@ -1083,10 +1083,6 @@ fetch_uri_sync_on_complete (GObject        *object,
   data->done = TRUE;
 }
 
-/* Synchronously request a URI - will iterate the thread-default main
- * context for historical reasons.  If you don't want that, push a
- * temporary one.
- */
 gboolean
 _ostree_fetcher_request_uri_to_membuf (OstreeFetcher  *fetcher,
                                        SoupURI        *uri,
@@ -1110,7 +1106,8 @@ _ostree_fetcher_request_uri_to_membuf (OstreeFetcher  *fetcher,
   if (g_cancellable_set_error_if_cancelled (cancellable, error))
     return FALSE;
 
-  mainctx = g_main_context_ref_thread_default ();
+  mainctx = g_main_context_new ();
+  g_main_context_push_thread_default (mainctx);
 
   data.done = FALSE;
   data.error = error;
@@ -1155,6 +1152,8 @@ _ostree_fetcher_request_uri_to_membuf (OstreeFetcher  *fetcher,
   ret = TRUE;
   *out_contents = g_memory_output_stream_steal_as_bytes (buf);
  out:
+  if (mainctx)
+    g_main_context_pop_thread_default (mainctx);
   g_clear_object (&(data.result_stream));
   return ret;
 }
diff --git a/src/libostree/ostree-metalink.c b/src/libostree/ostree-metalink.c
index 083ad16..5ca69e6 100644
--- a/src/libostree/ostree-metalink.c
+++ b/src/libostree/ostree-metalink.c
@@ -589,11 +589,6 @@ typedef struct
   GMainLoop             *loop;
 } FetchMetalinkSyncData;
 
-/*
- * Note that for legacy reasons we iterate the caller's main context.
- * If you don't want that (and you probably don't) push a temporary
- * one.
- */
 gboolean
 _ostree_metalink_request_sync (OstreeMetalink        *self,
                                SoupURI               **out_target_uri,
@@ -612,7 +607,8 @@ _ostree_metalink_request_sync (OstreeMetalink        *self,
   if (fetching_sync_uri != NULL)
     *fetching_sync_uri = _ostree_metalink_get_uri (self);
 
-  mainctx = g_main_context_ref_thread_default ();
+  mainctx = g_main_context_new ();
+  g_main_context_push_thread_default (mainctx);
 
   request.metalink = g_object_ref (self);
   request.urls = g_ptr_array_new_with_free_func ((GDestroyNotify) soup_uri_free);
@@ -637,6 +633,8 @@ _ostree_metalink_request_sync (OstreeMetalink        *self,
 
   ret = TRUE;
  out:
+  if (mainctx)
+    g_main_context_pop_thread_default (mainctx);
   g_clear_object (&request.metalink);
   g_clear_pointer (&request.urls, g_ptr_array_unref);
   g_clear_pointer (&request.parser, g_markup_parse_context_free);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]