summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Sixt <j6t@kdbg.org>2015-08-12 19:43:01 +0200
committerJunio C Hamano <gitster@pobox.com>2015-08-12 12:06:00 -0700
commit094c7e635287e999f382681b0749ce7711e5ce7d (patch)
tree3e74cf999d5cd4f863c62d5527ee77810cb266e2
parentee1c6c34ac64c1e10b17a50710ea7002b7e7241f (diff)
downloadgit-094c7e635287e999f382681b0749ce7711e5ce7d.tar.gz
prune: close directory earlier during loose-object directory traversaljk/prune-mtime
27e1e22d (prune: factor out loose-object directory traversal, 2014-10-16) introduced a new function for_each_loose_file_in_objdir() with a helper for_each_file_in_obj_subdir(). The latter calls callbacks for each file found during a directory traversal and finally also a callback for the directory itself. git-prune uses the function to clean up the object directory. In particular, in the directory callback it calls rmdir(). On Windows XP, this rmdir call fails, because the directory is still open while the callback is called. Close the directory before calling the callback. Signed-off-by: Johannes Sixt <j6t@kdbg.org> Acked-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--sha1_file.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/sha1_file.c b/sha1_file.c
index bf1bdbcdf5..7ea7a93359 100644
--- a/sha1_file.c
+++ b/sha1_file.c
@@ -3356,12 +3356,12 @@ static int for_each_file_in_obj_subdir(int subdir_nr,
break;
}
}
- strbuf_setlen(path, baselen);
+ closedir(dir);
+ strbuf_setlen(path, baselen);
if (!r && subdir_cb)
r = subdir_cb(subdir_nr, path->buf, data);
- closedir(dir);
return r;
}