tracker r2656 - in trunk: . src/trackerd
- From: mr svn gnome org
- To: svn-commits-list gnome org
- Subject: tracker r2656 - in trunk: . src/trackerd
- Date: Thu, 4 Dec 2008 16:05:06 +0000 (UTC)
Author: mr
Date: Thu Dec 4 16:05:05 2008
New Revision: 2656
URL: http://svn.gnome.org/viewvc/tracker?rev=2656&view=rev
Log:
* src/trackerd/tracker-monitor.[ch]:
* src/trackerd/tracker-processor.c: Make sure we recursively
remove all monitors for mount points which are unmounted. Also,
when a directory is deleted, remove the monitor, don't keep it
around!
Modified:
trunk/ChangeLog
trunk/src/trackerd/tracker-monitor.c
trunk/src/trackerd/tracker-monitor.h
trunk/src/trackerd/tracker-processor.c
Modified: trunk/src/trackerd/tracker-monitor.c
==============================================================================
--- trunk/src/trackerd/tracker-monitor.c (original)
+++ trunk/src/trackerd/tracker-monitor.c Thu Dec 4 16:05:05 2008
@@ -690,6 +690,12 @@
case IN_DELETE:
case IN_DELETE_SELF:
+ if (is_directory) {
+ tracker_monitor_remove (monitor,
+ module_name,
+ event->file);
+ }
+
g_signal_emit (monitor,
signals[ITEM_DELETED], 0,
module_name,
@@ -706,6 +712,12 @@
break;
case IN_UNMOUNT:
+ if (is_directory) {
+ tracker_monitor_remove (monitor,
+ module_name,
+ key);
+ }
+
g_signal_emit (monitor,
signals[ITEM_DELETED], 0,
module_name,
@@ -1012,6 +1024,12 @@
/* So we knew the source, but not the
* target location for the event.
*/
+ if (is_directory) {
+ tracker_monitor_remove (monitor,
+ module_name,
+ event->file);
+ }
+
g_signal_emit (monitor,
signals[ITEM_DELETED], 0,
module_name,
@@ -1113,6 +1131,12 @@
case IN_DELETE:
case IN_DELETE_SELF:
+ if (is_directory) {
+ tracker_monitor_remove (monitor,
+ module_name,
+ event->file);
+ }
+
g_signal_emit (monitor,
signals[ITEM_DELETED], 0,
module_name,
@@ -1336,6 +1360,12 @@
case IN_DELETE:
case IN_DELETE_SELF:
if (cookie == 0) {
+ if (is_directory) {
+ tracker_monitor_remove (monitor,
+ module_name,
+ file);
+ }
+
g_signal_emit (monitor,
signals[ITEM_DELETED], 0,
module_name,
@@ -1413,6 +1443,10 @@
break;
case IN_UNMOUNT:
+ if (is_directory) {
+ tracker_monitor_remove (monitor, module_name, file);
+ }
+
g_signal_emit (monitor,
signals[ITEM_DELETED], 0,
module_name,
@@ -1592,6 +1626,12 @@
break;
case G_FILE_MONITOR_EVENT_DELETED:
+ if (is_directory) {
+ tracker_monitor_remove (monitor,
+ module_name,
+ file);
+ }
+
g_signal_emit (monitor,
signals[ITEM_DELETED], 0,
module_name,
@@ -1783,20 +1823,16 @@
gboolean
tracker_monitor_remove (TrackerMonitor *monitor,
const gchar *module_name,
- GFile *file)
+ GFile *file)
{
- GFileMonitor *file_monitor;
- GHashTable *monitors;
- gchar *path;
+ GHashTable *monitors;
+ gchar *path;
+ gboolean removed;
g_return_val_if_fail (TRACKER_IS_MONITOR (monitor), FALSE);
g_return_val_if_fail (module_name != NULL, FALSE);
g_return_val_if_fail (G_IS_FILE (file), FALSE);
-
- if (!tracker_config_get_enable_watches (monitor->private->config)) {
- return TRUE;
- }
-
+
monitors = g_hash_table_lookup (monitor->private->modules, module_name);
if (!monitors) {
g_warning ("No monitor hash table for module:'%s'",
@@ -1804,26 +1840,66 @@
return FALSE;
}
- file_monitor = g_hash_table_lookup (monitors, file);
- if (!file_monitor) {
- return TRUE;
- }
-
- /* We reset this because now it is possible we have limit - 1 */
- monitor->private->monitor_limit_warned = FALSE;
-
- g_hash_table_remove (monitors, file);
-
+ removed = g_hash_table_remove (monitors, file);
path = g_file_get_path (file);
-
+
g_debug ("Removed monitor for module:'%s', path:'%s', total monitors:%d",
module_name,
path,
g_hash_table_size (monitors));
-
+
g_free (path);
- return TRUE;
+ /* tracker_monitor_remove_recursively (monitor, event->file); */
+
+ return removed;
+}
+
+
+gboolean
+tracker_monitor_remove_recursively (TrackerMonitor *monitor,
+ GFile *file)
+{
+ GHashTableIter iter1;
+ gpointer iter_module_name, iter_hash_table;
+ guint items_removed = 0;
+
+ g_return_val_if_fail (TRACKER_IS_MONITOR (monitor), FALSE);
+ g_return_val_if_fail (G_IS_FILE (file), FALSE);
+
+ g_hash_table_iter_init (&iter1, monitor->private->modules);
+ while (g_hash_table_iter_next (&iter1, &iter_module_name, &iter_hash_table)) {
+ GHashTableIter iter2;
+ gpointer iter_file, iter_file_monitor;
+
+ g_hash_table_iter_init (&iter2, iter_hash_table);
+ while (g_hash_table_iter_next (&iter2, &iter_file, &iter_file_monitor)) {
+ gchar *path;
+
+ if (!g_file_has_prefix (iter_file, file) &&
+ !g_file_equal (iter_file, file)) {
+ continue;
+ }
+
+ path = g_file_get_path (iter_file);
+
+ g_debug ("Removed monitor for module:'%s', path:'%s', total monitors:%d",
+ iter_module_name,
+ path,
+ g_hash_table_size (iter_hash_table));
+
+ g_free (path);
+
+ g_hash_table_iter_remove (&iter2);
+
+ /* We reset this because now it is possible we have limit - 1 */
+ monitor->private->monitor_limit_warned = FALSE;
+
+ items_removed++;
+ }
+ }
+
+ return items_removed > 0;
}
gboolean
Modified: trunk/src/trackerd/tracker-monitor.h
==============================================================================
--- trunk/src/trackerd/tracker-monitor.h (original)
+++ trunk/src/trackerd/tracker-monitor.h Thu Dec 4 16:05:05 2008
@@ -57,8 +57,10 @@
gboolean tracker_monitor_add (TrackerMonitor *monitor,
const gchar *module_name,
GFile *file);
-gboolean tracker_monitor_remove (TrackerMonitor *monitor,
+gboolean tracker_monitor_remove (TrackerMonitor *monitor,
const gchar *module_name,
+ GFile *file);
+gboolean tracker_monitor_remove_recursively (TrackerMonitor *monitor,
GFile *file);
gboolean tracker_monitor_is_watched (TrackerMonitor *monitor,
const gchar *module_name,
Modified: trunk/src/trackerd/tracker-processor.c
==============================================================================
--- trunk/src/trackerd/tracker-processor.c (original)
+++ trunk/src/trackerd/tracker-processor.c Thu Dec 4 16:05:05 2008
@@ -1457,7 +1457,7 @@
* inserted :O -mr
*/
file = g_file_new_for_path (mount_point);
- tracker_monitor_remove (processor->private->monitor, module_name, file);
+ tracker_monitor_remove_recursively (processor->private->monitor, file);
g_object_unref (file);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]