[gtk/matthiasc/for-master] bookmarksmanager: Cancel async reads properly




commit e4215ec4c77c4c8f517c7fbf3e78476fab2487ef
Author: Matthias Clasen <mclasen redhat com>
Date:   Thu Aug 27 12:34:02 2020 -0400

    bookmarksmanager: Cancel async reads properly
    
    This was causing the objects-finalize test to fail in ci.

 gtk/gtkbookmarksmanager.c        | 12 +++++++++---
 gtk/gtkbookmarksmanagerprivate.h |  2 ++
 2 files changed, 11 insertions(+), 3 deletions(-)
---
diff --git a/gtk/gtkbookmarksmanager.c b/gtk/gtkbookmarksmanager.c
index b07e05e6fd..b253a1514e 100644
--- a/gtk/gtkbookmarksmanager.c
+++ b/gtk/gtkbookmarksmanager.c
@@ -157,7 +157,8 @@ read_bookmarks_finish (GObject      *source,
 
   if (!g_file_load_contents_finish (file, result, &contents, NULL, NULL, &error)) 
     {
-      g_warning ("Failed to load '%s': %s", g_file_peek_path (file), error->message);
+      if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+        g_warning ("Failed to load '%s': %s", g_file_peek_path (file), error->message);
       g_error_free (error);
       return;
     }
@@ -238,7 +239,7 @@ bookmarks_file_changed (GFileMonitor      *monitor,
     case G_FILE_MONITOR_EVENT_CHANGED:
     case G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT:
     case G_FILE_MONITOR_EVENT_CREATED:
-      g_file_load_contents_async (file, NULL, read_bookmarks_finish, manager);
+      g_file_load_contents_async (file, manager->cancellable, read_bookmarks_finish, manager);
       break;
 
     case G_FILE_MONITOR_EVENT_DELETED:
@@ -267,6 +268,8 @@ _gtk_bookmarks_manager_new (GtkBookmarksChangedFunc changed_func, gpointer chang
   manager->changed_func = changed_func;
   manager->changed_func_data = changed_func_data;
 
+  manager->cancellable = g_cancellable_new ();
+
   bookmarks_file = get_bookmarks_file ();
   if (!g_file_query_exists (bookmarks_file, NULL))
     {
@@ -281,7 +284,7 @@ _gtk_bookmarks_manager_new (GtkBookmarksChangedFunc changed_func, gpointer chang
       g_object_unref (legacy_bookmarks_file);
     }
   else
-    g_file_load_contents_async (bookmarks_file, NULL, read_bookmarks_finish, manager);
+    g_file_load_contents_async (bookmarks_file, manager->cancellable, read_bookmarks_finish, manager);
 
   error = NULL;
   manager->bookmarks_monitor = g_file_monitor_file (bookmarks_file,
@@ -307,6 +310,9 @@ _gtk_bookmarks_manager_free (GtkBookmarksManager *manager)
 {
   g_return_if_fail (manager != NULL);
 
+  g_cancellable_cancel (manager->cancellable);
+  g_object_unref (manager->cancellable);
+
   if (manager->bookmarks_monitor)
     {
       g_file_monitor_cancel (manager->bookmarks_monitor);
diff --git a/gtk/gtkbookmarksmanagerprivate.h b/gtk/gtkbookmarksmanagerprivate.h
index 7333f771a5..1a05115871 100644
--- a/gtk/gtkbookmarksmanagerprivate.h
+++ b/gtk/gtkbookmarksmanagerprivate.h
@@ -38,6 +38,8 @@ typedef struct
 
   gpointer changed_func_data;
   GtkBookmarksChangedFunc changed_func;
+
+  GCancellable *cancellable;
 } GtkBookmarksManager;
 
 typedef struct


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