diff --git a/common/flatpak-utils-http.c b/common/flatpak-utils-http.c index 959f531e..ffe1b476 100644 --- a/common/flatpak-utils-http.c +++ b/common/flatpak-utils-http.c @@ -43,7 +43,8 @@ typedef struct typedef struct { - GMainLoop *loop; + GMainContext *context; + gboolean done; GError *error; gboolean store_compressed; @@ -350,7 +351,8 @@ stream_closed (GObject *source, GAsyncResult *res, gpointer user_data) g_clear_pointer (&data->out, g_object_unref); } - g_main_loop_quit (data->loop); + data->done = TRUE; + g_main_context_wakeup (data->context); } static void @@ -418,7 +420,8 @@ load_uri_callback (GObject *source_object, in = soup_request_send_finish (SOUP_REQUEST (request), res, &data->error); if (in == NULL) { - g_main_loop_quit (data->loop); + /* data->error has been set */ + g_main_context_wakeup (data->context); return; } @@ -483,7 +486,7 @@ load_uri_callback (GObject *source_object, "Server returned status %u: %s", msg->status_code, soup_status_get_phrase (msg->status_code)); - g_main_loop_quit (data->loop); + g_main_context_wakeup (data->context); return; } @@ -601,7 +604,6 @@ flatpak_load_http_uri_once (SoupSession *soup_session, GBytes *bytes = NULL; g_autoptr(GMainContext) context = NULL; g_autoptr(SoupRequestHTTP) request = NULL; - g_autoptr(GMainLoop) loop = NULL; g_autoptr(GString) content = g_string_new (""); LoadUriData data = { NULL }; SoupMessage *m; @@ -610,8 +612,7 @@ flatpak_load_http_uri_once (SoupSession *soup_session, context = g_main_context_ref_thread_default (); - loop = g_main_loop_new (context, TRUE); - data.loop = loop; + data.context = context; data.content = content; data.progress = progress; data.cancellable = cancellable; @@ -641,7 +642,8 @@ flatpak_load_http_uri_once (SoupSession *soup_session, cancellable, load_uri_callback, &data); - g_main_loop_run (loop); + while (data.error == NULL && !data.done) + g_main_context_iteration (data.context, TRUE); if (data.error) { @@ -721,7 +723,6 @@ flatpak_download_http_uri_once (SoupSession *soup_session, GError **error) { g_autoptr(SoupRequestHTTP) request = NULL; - g_autoptr(GMainLoop) loop = NULL; g_autoptr(GMainContext) context = NULL; LoadUriData data = { NULL }; SoupMessage *m; @@ -730,8 +731,7 @@ flatpak_download_http_uri_once (SoupSession *soup_session, context = g_main_context_ref_thread_default (); - loop = g_main_loop_new (context, TRUE); - data.loop = loop; + data.context = context; data.out = out; data.progress = progress; data.cancellable = cancellable; @@ -758,7 +758,8 @@ flatpak_download_http_uri_once (SoupSession *soup_session, cancellable, load_uri_callback, &data); - g_main_loop_run (loop); + while (data.error == NULL && !data.done) + g_main_context_iteration (data.context, TRUE); if (out_bytes_written) *out_bytes_written = data.downloaded_bytes; @@ -866,7 +867,6 @@ flatpak_cache_http_uri_once (SoupSession *soup_session, GError **error) { g_autoptr(SoupRequestHTTP) request = NULL; - g_autoptr(GMainLoop) loop = NULL; g_autoptr(GMainContext) context = NULL; g_autoptr(CacheHttpData) cache_data = NULL; g_autofree char *parent_path = g_path_get_dirname (dest_subpath); @@ -914,8 +914,7 @@ flatpak_cache_http_uri_once (SoupSession *soup_session, context = g_main_context_ref_thread_default (); - loop = g_main_loop_new (context, TRUE); - data.loop = loop; + data.context = context; data.cache_data = cache_data; data.out_tmpfile = &out_tmpfile; data.out_tmpfile_parent_dfd = dfd; @@ -956,7 +955,8 @@ flatpak_cache_http_uri_once (SoupSession *soup_session, cancellable, load_uri_callback, &data); - g_main_loop_run (loop); + while (data.error == NULL && !data.done) + g_main_context_iteration (data.context, TRUE); if (data.error) {