[tracker] libtracker-miner: Fix cancellation of data_provider_begin()



commit 8a3075343512208a8e3be297259cea877f133418
Author: Carlos Garnacho <carlosg gnome org>
Date:   Mon Jul 10 01:11:56 2017 +0200

    libtracker-miner: Fix cancellation of data_provider_begin()
    
    The async op is not owner of the user data, so it may be actually
    gone in the GAsyncReadyCallback. Ensure we only use it on success
    or on other errors than cancelled, fixes crashes in tracker-crawler
    crawl-interrupted test after commit b4f7b84fe4 because
    tracker_crawler_stop() is now called at a time that triggers this.

 src/libtracker-miner/tracker-crawler.c |   28 ++++++++++++++--------------
 1 files changed, 14 insertions(+), 14 deletions(-)
---
diff --git a/src/libtracker-miner/tracker-crawler.c b/src/libtracker-miner/tracker-crawler.c
index 0af8d1f..78367e4 100644
--- a/src/libtracker-miner/tracker-crawler.c
+++ b/src/libtracker-miner/tracker-crawler.c
@@ -964,25 +964,25 @@ data_provider_begin_cb (GObject      *object,
        enumerator = tracker_data_provider_begin_finish (TRACKER_DATA_PROVIDER (object), result, &error);
 
        info = user_data;
-       dpd = info->dpd;
-       dpd->enumerator = enumerator;
 
-       if (!dpd->enumerator) {
-               if (error) {
-                       if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
-                               gchar *uri = g_file_get_uri (dpd->dir_file);
-                               g_warning ("Could not enumerate container / directory '%s', %s",
-                                          uri, error ? error->message : "no error given");
-                               g_free (uri);
-                       }
-                       g_clear_error (&error);
-               }
+       if (error) {
+               if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
+                       gchar *uri;
 
-               process_func_start (dpd->crawler);
+                       dpd = info->dpd;
+                       uri = g_file_get_uri (dpd->dir_file);
+                       g_warning ("Could not enumerate container / directory '%s', %s",
+                                  uri, error ? error->message : "no error given");
+                       g_free (uri);
+                       process_func_start (dpd->crawler);
+               }
+               g_clear_error (&error);
                return;
        }
 
-       g_file_enumerator_next_files_async (dpd->enumerator,
+       dpd = info->dpd;
+       dpd->enumerator = enumerator;
+       g_file_enumerator_next_files_async (enumerator,
                                            MAX_SIMULTANEOUS_ITEMS,
                                            G_PRIORITY_LOW,
                                            dpd->crawler->priv->cancellable,


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