[tracker/tracker-1.0] libtracker-miner: Keep the crawler alive across async calls



commit fd1e87b34086dc6c5d2136706dc9da09e5d2bd04
Author: Debarshi Ray <debarshir gnome org>
Date:   Wed Oct 1 19:44:42 2014 +0200

    libtracker-miner: Keep the crawler alive across async calls
    
    The EnumeratorData held a reference to TrackerCrawler while
    enumerating. Just before closing the enumerator we destroy the
    EnumeratorData and drop the reference. This can lead to TrackerCrawler
    getting destroyed.
    
    To prevent this, grab a new reference before dropping the older one
    and keep it till the asynchronous call is alive.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=737769

 src/libtracker-miner/tracker-crawler.c |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)
---
diff --git a/src/libtracker-miner/tracker-crawler.c b/src/libtracker-miner/tracker-crawler.c
index 84bcb4c..e50b092 100644
--- a/src/libtracker-miner/tracker-crawler.c
+++ b/src/libtracker-miner/tracker-crawler.c
@@ -655,6 +655,7 @@ file_enumerator_close_cb (GObject      *enumerator,
         * continue with queued files/directories.
         */
        process_func_start (crawler);
+       g_object_unref (crawler);
 }
 
 static void
@@ -700,12 +701,12 @@ file_enumerate_next_cb (GObject      *object,
                        enumerator_data_process (parent, ed);
                }
 
-               enumerator_data_free (ed);
                g_file_enumerator_close_async (enumerator,
                                               G_PRIORITY_DEFAULT,
                                               NULL,
                                               file_enumerator_close_cb,
-                                              crawler);
+                                              g_object_ref (crawler));
+               enumerator_data_free (ed);
                g_object_unref (enumerator);
 
                return;


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