1
0
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:
Colin Walters 2002-04-14 06:40:19 +00:00
parent 4cb72a5478
commit 7c4f687309

View File

@ -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;
}