mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-12-27 10:54:40 +00:00
(lock_file): If the lock file is older than an hour, delete it. Reset
attempts to zero if we have to break the lock.
This commit is contained in:
parent
4cb72a5478
commit
7c4f687309
@ -416,6 +416,7 @@ int
|
||||
lock_file(const char *filename, void **state)
|
||||
{
|
||||
int fd;
|
||||
struct stat buf;
|
||||
int attempts = 0;
|
||||
char *lockext = ".lockfile";
|
||||
char *lockpath = malloc(strlen(filename) + strlen(lockext) + 60);
|
||||
@ -426,6 +427,10 @@ lock_file(const char *filename, void **state)
|
||||
*state = lockpath;
|
||||
trylock:
|
||||
attempts++;
|
||||
/* If the lock is over an hour old, delete it. */
|
||||
if (stat(lockpath, &buf) == 0
|
||||
&& (difftime(buf.st_ctime, time(NULL) > 60*60)))
|
||||
unlink(lockpath);
|
||||
if ((fd = open(lockpath, O_CREAT | O_EXCL, 0600)) < 0)
|
||||
{
|
||||
if (errno == EEXIST)
|
||||
@ -433,7 +438,10 @@ lock_file(const char *filename, void **state)
|
||||
/* Break the lock; we won't corrupt the file, but we might
|
||||
lose some scores. */
|
||||
if (attempts > MAX_ATTEMPTS)
|
||||
unlink(lockpath);
|
||||
{
|
||||
unlink(lockpath);
|
||||
attempts = 0;
|
||||
}
|
||||
sleep((rand() % 2)+1);
|
||||
goto trylock;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user