diff options
author | Alex Riesen <raa.lkml@gmail.com> | 2007-04-26 00:28:17 +0200 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2007-04-25 17:34:37 -0700 |
commit | c21aa54e190e6527f05a2a943b343032e9dac90b (patch) | |
tree | 3e0f5a4ada1e25a50fbfc0a4b70326b4bf0f3ce1 /builtin-write-tree.c | |
parent | d1efefa46fda6bb68bcd73a5e532eef98ef28a1d (diff) | |
download | git-c21aa54e190e6527f05a2a943b343032e9dac90b.tar.gz |
Fix handle leak in write_tree
This is a quick and dirty fix for the broken "git cherry-pick -n" on
some broken OS, which does not remove the directory entry after unlink
succeeded(!) if the file is still open somewher.
The entry is left but "protected": no open, no unlink, no stat.
Very annoying.
Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'builtin-write-tree.c')
-rw-r--r-- | builtin-write-tree.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/builtin-write-tree.c b/builtin-write-tree.c index 90fc1cfcf4..a1894814f7 100644 --- a/builtin-write-tree.c +++ b/builtin-write-tree.c @@ -36,8 +36,10 @@ int write_tree(unsigned char *sha1, int missing_ok, const char *prefix) die("git-write-tree: error building trees"); if (0 <= newfd) { if (!write_cache(newfd, active_cache, active_nr) - && !close(newfd)) + && !close(newfd)) { commit_lock_file(lock_file); + newfd = -1; + } } /* Not being able to write is fine -- we are only interested * in updating the cache-tree part, and if the next caller @@ -55,6 +57,8 @@ int write_tree(unsigned char *sha1, int missing_ok, const char *prefix) else hashcpy(sha1, active_cache_tree->sha1); + if (0 <= newfd) + close(newfd); rollback_lock_file(lock_file); return 0; |