summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 2488df8)
raw | patch | inline | side by side (parent: 2488df8)
author | Johannes Schindelin <Johannes.Schindelin@gmx.de> | |
Tue, 13 Nov 2007 20:05:03 +0000 (21:05 +0100) | ||
committer | Junio C Hamano <gitster@pobox.com> | |
Wed, 14 Nov 2007 23:18:39 +0000 (15:18 -0800) |
This is needed on Windows since open files cannot be unlinked.
Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
cache.h | patch | blob | history | |
lockfile.c | patch | blob | history |
index 33ebccf48d0d8963ab5b262bfb87312e6542ed75..dc75f9d343bd0b22398796a888c4d7088c3de71a 100644 (file)
--- a/cache.h
+++ b/cache.h
@@ -290,6 +290,7 @@ extern int refresh_index(struct index_state *, unsigned int flags, const char **
struct lock_file {
struct lock_file *next;
+ int fd;
pid_t owner;
char on_list;
char filename[PATH_MAX];
diff --git a/lockfile.c b/lockfile.c
index 9a1f64d8d71d13ee6be48c539d79764066288f07..258fb3f5ef8636e7ff144f551689da3090518a0e 100644 (file)
--- a/lockfile.c
+++ b/lockfile.c
while (lock_file_list) {
if (lock_file_list->owner == me &&
- lock_file_list->filename[0])
+ lock_file_list->filename[0]) {
+ close(lock_file_list->fd);
unlink(lock_file_list->filename);
+ }
lock_file_list = lock_file_list->next;
}
}
static int lock_file(struct lock_file *lk, const char *path)
{
- int fd;
-
if (strlen(path) >= sizeof(lk->filename)) return -1;
strcpy(lk->filename, path);
/*
*/
resolve_symlink(lk->filename, sizeof(lk->filename)-5);
strcat(lk->filename, ".lock");
- fd = open(lk->filename, O_RDWR | O_CREAT | O_EXCL, 0666);
- if (0 <= fd) {
+ lk->fd = open(lk->filename, O_RDWR | O_CREAT | O_EXCL, 0666);
+ if (0 <= lk->fd) {
if (!lock_file_list) {
signal(SIGINT, remove_lock_file_on_signal);
atexit(remove_lock_file);
}
else
lk->filename[0] = 0;
- return fd;
+ return lk->fd;
}
int hold_lock_file_for_update(struct lock_file *lk, const char *path, int die_on_error)
{
char result_file[PATH_MAX];
int i;
+ close(lk->fd);
strcpy(result_file, lk->filename);
i = strlen(result_file) - 5; /* .lock */
result_file[i] = 0;
void rollback_lock_file(struct lock_file *lk)
{
- if (lk->filename[0])
+ if (lk->filename[0]) {
+ close(lk->fd);
unlink(lk->filename);
+ }
lk->filename[0] = 0;
}