-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Make index file locking code reusable to others.
The framework to create lockfiles that are removed at exit is first used to reliably write the index file, but it is applicable to other things, so stop calling it "cache_file". This also rewords a few remaining error message that called the index file "cache file". Signed-off-by: Junio C Hamano <junkio@cox.net>
- Loading branch information
Junio C Hamano
committed
Jun 6, 2006
1 parent
dd8239f
commit 021b6e4
Showing
11 changed files
with
98 additions
and
95 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
/* | ||
* Copyright (c) 2005, Junio C Hamano | ||
*/ | ||
#include <signal.h> | ||
#include "cache.h" | ||
|
||
static struct lock_file *lock_file_list; | ||
|
||
static void remove_lock_file(void) | ||
{ | ||
while (lock_file_list) { | ||
if (lock_file_list->filename[0]) | ||
unlink(lock_file_list->filename); | ||
lock_file_list = lock_file_list->next; | ||
} | ||
} | ||
|
||
static void remove_lock_file_on_signal(int signo) | ||
{ | ||
remove_lock_file(); | ||
signal(SIGINT, SIG_DFL); | ||
raise(signo); | ||
} | ||
|
||
int hold_lock_file_for_update(struct lock_file *lk, const char *path) | ||
{ | ||
int fd; | ||
sprintf(lk->filename, "%s.lock", path); | ||
fd = open(lk->filename, O_RDWR | O_CREAT | O_EXCL, 0666); | ||
if (fd >=0 && !lk->next) { | ||
lk->next = lock_file_list; | ||
lock_file_list = lk; | ||
signal(SIGINT, remove_lock_file_on_signal); | ||
atexit(remove_lock_file); | ||
} | ||
return fd; | ||
} | ||
|
||
int commit_lock_file(struct lock_file *lk) | ||
{ | ||
char result_file[PATH_MAX]; | ||
int i; | ||
strcpy(result_file, lk->filename); | ||
i = strlen(result_file) - 5; /* .lock */ | ||
result_file[i] = 0; | ||
i = rename(lk->filename, result_file); | ||
lk->filename[0] = 0; | ||
return i; | ||
} | ||
|
||
void rollback_lock_file(struct lock_file *lk) | ||
{ | ||
if (lk->filename[0]) | ||
unlink(lk->filename); | ||
lk->filename[0] = 0; | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters