[tracker] libtracker-miner: Postpone TrackerIndexingTree::directory-removed emission



commit 5b4ab760c4782d1b7a098605b69d547c9466d20e
Author: Carlos Garnacho <carlosg gnome org>
Date:   Fri Aug 14 23:55:00 2015 +0200

    libtracker-miner: Postpone TrackerIndexingTree::directory-removed emission
    
    Emitting before actually detaching the file from the GNode tree won't be
    safe if the signal results in reentrancy on tracker_indexing_tree_remove()

 src/libtracker-miner/tracker-indexing-tree.c |    7 +++++--
 1 files changed, 5 insertions(+), 2 deletions(-)
---
diff --git a/src/libtracker-miner/tracker-indexing-tree.c b/src/libtracker-miner/tracker-indexing-tree.c
index 6d9fc37..9a270f6 100644
--- a/src/libtracker-miner/tracker-indexing-tree.c
+++ b/src/libtracker-miner/tracker-indexing-tree.c
@@ -554,6 +554,7 @@ tracker_indexing_tree_remove (TrackerIndexingTree *tree,
        TrackerIndexingTreePrivate *priv;
        GNode *node, *parent;
        NodeData *data;
+       GFile *file;
 
        g_return_if_fail (TRACKER_IS_INDEXING_TREE (tree));
        g_return_if_fail (G_IS_FILE (directory));
@@ -575,8 +576,7 @@ tracker_indexing_tree_remove (TrackerIndexingTree *tree,
                return;
        }
 
-       g_signal_emit (tree, signals[DIRECTORY_REMOVED], 0, data->file);
-
+       file = g_object_ref (data->file);
        parent = node->parent;
        g_node_unlink (node);
 
@@ -586,6 +586,9 @@ tracker_indexing_tree_remove (TrackerIndexingTree *tree,
 
        node_data_free (node->data);
        g_node_destroy (node);
+
+       g_signal_emit (tree, signals[DIRECTORY_REMOVED], 0, file);
+       g_object_unref (file);
 }
 
 /**


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