summaryrefslogtreecommitdiff
path: root/metadata/metatree.c
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2009-06-23 20:52:34 +0200
committerAlexander Larsson <alexl@redhat.com>2009-06-23 20:52:34 +0200
commit5fb558770f0a3f3c7d277855700e6812c01a9762 (patch)
tree1ad50fc28fc630319c3ed477731be8cc42055167 /metadata/metatree.c
parent454a365b0b53cce2010787f6eb4ee28c321a6375 (diff)
downloadgvfs-5fb558770f0a3f3c7d277855700e6812c01a9762.tar.gz
Fix deadlock in MetaTree
meta_tree_refresh calls meta_tree_init which may call meta_tree_refresh, which can deadlock due to the writer lock. Call meta_tree_refresh_locked instead.
Diffstat (limited to 'metadata/metatree.c')
-rw-r--r--metadata/metatree.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/metadata/metatree.c b/metadata/metatree.c
index 9664fa84..0f66893b 100644
--- a/metadata/metatree.c
+++ b/metadata/metatree.c
@@ -170,6 +170,7 @@ struct _MetaTree {
MetaJournal *journal;
};
+static void meta_tree_refresh_locked (MetaTree *tree);
static MetaJournal *meta_journal_open (MetaTree *tree,
const char *filename,
gboolean for_write,
@@ -504,7 +505,7 @@ meta_tree_init (MetaTree *tree)
journal. However we can detect this case by looking at the tree and see
if its been rotated, we do this to ensure we have an uptodate tree+journal
combo. */
- meta_tree_refresh (tree);
+ meta_tree_refresh_locked (tree);
return TRUE;