From d34e70d6b89b33c398403e872c0dd751d44c7844 Mon Sep 17 00:00:00 2001 From: Karsten Blees Date: Tue, 6 Mar 2012 10:18:41 +0100 Subject: fix deletion of .git/objects sub-directories in git-prune/repack Both git-prune and git-repack (and thus, git-gc) try to rmdir while holding a DIR* handle on the directory. This can leave dangling empty directories in the .git/objects on platforms where directory cannot be removed while they are open. First call closedir() and then rmdir(); that is more logical ordering. Reported-by: John Chen Reported-by: Stefan Naewe Signed-off-by: Karsten Blees Improved-and-Acked-by: Johannes Sixt Signed-off-by: Junio C Hamano --- builtin/prune-packed.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'builtin/prune-packed.c') diff --git a/builtin/prune-packed.c b/builtin/prune-packed.c index f9463deec2..b58a2e1eb2 100644 --- a/builtin/prune-packed.c +++ b/builtin/prune-packed.c @@ -35,8 +35,6 @@ static void prune_dir(int i, DIR *dir, char *pathname, int len, int opts) unlink_or_warn(pathname); display_progress(progress, i + 1); } - pathname[len] = 0; - rmdir(pathname); } void prune_packed_objects(int opts) @@ -65,6 +63,8 @@ void prune_packed_objects(int opts) continue; prune_dir(i, d, pathname, len + 3, opts); closedir(d); + pathname[len + 2] = '\0'; + rmdir(pathname); } stop_progress(&progress); } -- cgit v1.2.3