Mercurial > emacs
changeset 44576:90866353c7bd
(lock_file): If the lock file is older than an hour, delete it. Reset
attempts to zero if we have to break the lock.
author | Colin Walters <walters@gnu.org> |
---|---|
date | Sun, 14 Apr 2002 06:40:19 +0000 |
parents | 52bd3d1b9cb9 |
children | ffb634bccc64 |
files | lib-src/update-game-score.c |
diffstat | 1 files changed, 9 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/lib-src/update-game-score.c Sun Apr 14 05:51:31 2002 +0000 +++ b/lib-src/update-game-score.c Sun Apr 14 06:40:19 2002 +0000 @@ -416,6 +416,7 @@ 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 @@ *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 @@ /* 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; }