summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar Michael Haggerty <mhagger@alum.mit.edu>2014-10-01 12:28:12 +0200
committerLibravatar Junio C Hamano <gitster@pobox.com>2014-10-01 13:38:42 -0700
commitebb8e380e98e83f32c1cc04200d3749ab4c0b90a (patch)
tree578ad31c440cda905a63cce2e11a43655f582efa
parentlockfile: unlock file if lockfile permissions cannot be adjusted (diff)
downloadtgif-ebb8e380e98e83f32c1cc04200d3749ab4c0b90a.tar.xz
hold_lock_file_for_append(): release lock on errors
If there is an error copying the old contents to the lockfile, roll back the lockfile before exiting so that the lockfile is not held until process cleanup. Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu> Reviewed-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--lockfile.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/lockfile.c b/lockfile.c
index d74de8d329..f4ce79bc27 100644
--- a/lockfile.c
+++ b/lockfile.c
@@ -219,13 +219,13 @@ int hold_lock_file_for_append(struct lock_file *lk, const char *path, int flags)
if (errno != ENOENT) {
if (flags & LOCK_DIE_ON_ERROR)
die("cannot open '%s' for copying", path);
- close(fd);
+ rollback_lock_file(lk);
return error("cannot open '%s' for copying", path);
}
} else if (copy_fd(orig_fd, fd)) {
if (flags & LOCK_DIE_ON_ERROR)
exit(128);
- close(fd);
+ rollback_lock_file(lk);
return -1;
}
return fd;