[tracker] libtracker-miner: Invalidate TrackerDecoratorFS cache on (pre)unmount



commit fadc6b81f2b5a142c9d22c7efb80be139ffec311
Author: Carlos Garnacho <carlosg gnome org>
Date:   Sat Aug 15 00:03:11 2015 +0200

    libtracker-miner: Invalidate TrackerDecoratorFS cache on (pre)unmount
    
    This ensures tracker-extract promptly drops all its current items when
    volumes are being unmounted, otherwise the already cached items will keep
    being processed, possibly preventing unmount from happening.

 src/libtracker-miner/Makefile.am                 |    1 +
 src/libtracker-miner/tracker-decorator-fs.c      |    4 +++
 src/libtracker-miner/tracker-decorator-private.h |   27 ++++++++++++++++++++++
 src/libtracker-miner/tracker-decorator.c         |    7 +++++
 4 files changed, 39 insertions(+), 0 deletions(-)
---
diff --git a/src/libtracker-miner/Makefile.am b/src/libtracker-miner/Makefile.am
index eafb3ca..25cda0e 100644
--- a/src/libtracker-miner/Makefile.am
+++ b/src/libtracker-miner/Makefile.am
@@ -33,6 +33,7 @@ libtracker_minerincludedir=$(includedir)/tracker-$(TRACKER_API_VERSION)/libtrack
 private_sources =                                     \
        tracker-crawler.c                              \
        tracker-crawler.h                              \
+       tracker-decorator-private.h                    \
        tracker-file-data-provider.c                   \
        tracker-file-data-provider.h                   \
        tracker-file-enumerator.c                      \
diff --git a/src/libtracker-miner/tracker-decorator-fs.c b/src/libtracker-miner/tracker-decorator-fs.c
index 7ed097e..af4fbf0 100644
--- a/src/libtracker-miner/tracker-decorator-fs.c
+++ b/src/libtracker-miner/tracker-decorator-fs.c
@@ -23,6 +23,7 @@
 #include <libtracker-common/tracker-common.h>
 #include <libtracker-sparql/tracker-sparql.h>
 
+#include "tracker-decorator-private.h"
 #include "tracker-decorator-fs.h"
 
 #define TRACKER_DECORATOR_FS_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TRACKER_TYPE_DECORATOR_FS, 
TrackerDecoratorFSPrivate))
@@ -239,6 +240,7 @@ mount_point_removed_cb (GVolumeMonitor *monitor,
 
        uuid = mount_point_get_uuid (mount);
        urn = g_strdup_printf (TRACKER_PREFIX_DATASOURCE_URN "%s", uuid);
+       _tracker_decorator_invalidate_cache (user_data);
        check_files (user_data, urn, FALSE, remove_files_cb);
        g_free (urn);
        g_free (uuid);
@@ -256,6 +258,8 @@ tracker_decorator_fs_iface_init (GInitable     *initable,
        priv->volume_monitor = g_volume_monitor_get ();
        g_signal_connect_object (priv->volume_monitor, "mount-added",
                                 G_CALLBACK (mount_point_added_cb), initable, 0);
+       g_signal_connect_object (priv->volume_monitor, "mount-pre-unmount",
+                                G_CALLBACK (mount_point_removed_cb), initable, 0);
        g_signal_connect_object (priv->volume_monitor, "mount-removed",
                                 G_CALLBACK (mount_point_removed_cb), initable, 0);
 
diff --git a/src/libtracker-miner/tracker-decorator-private.h 
b/src/libtracker-miner/tracker-decorator-private.h
new file mode 100644
index 0000000..8acc7e1
--- /dev/null
+++ b/src/libtracker-miner/tracker-decorator-private.h
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2014 Carlos Garnacho  <carlosg gnome org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA  02110-1301, USA.
+ */
+
+#ifndef __TRACKER_DECORATOR_PRIVATE_H__
+#define __TRACKER_DECORATOR_PRIVATE_H__
+
+#include "tracker-decorator.h"
+
+void _tracker_decorator_invalidate_cache (TrackerDecorator *decorator);
+
+#endif /* __TRACKER_DECORATOR_PRIVATE_H__ */
diff --git a/src/libtracker-miner/tracker-decorator.c b/src/libtracker-miner/tracker-decorator.c
index cac453a..cdd2ce3 100644
--- a/src/libtracker-miner/tracker-decorator.c
+++ b/src/libtracker-miner/tracker-decorator.c
@@ -23,6 +23,7 @@
 
 #include "tracker-decorator.h"
 #include "tracker-priority-queue.h"
+#include "tracker-decorator-private.h"
 
 #define QUERY_BATCH_SIZE 100
 #define DEFAULT_BATCH_SIZE 200
@@ -1758,3 +1759,9 @@ tracker_decorator_info_get_sparql (TrackerDecoratorInfo *info)
 
        return g_task_get_task_data (info->task);
 }
+
+void
+_tracker_decorator_invalidate_cache (TrackerDecorator *decorator)
+{
+       decorator_rebuild_cache (decorator);
+}


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