From 7c4f687309da8fc8ef0a6a172d83fbfee1f0c662 Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Sun, 14 Apr 2002 06:40:19 +0000 Subject: [PATCH] (lock_file): If the lock file is older than an hour, delete it. Reset attempts to zero if we have to break the lock. --- lib-src/update-game-score.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/lib-src/update-game-score.c b/lib-src/update-game-score.c index 2f49197a6dc..27e0baffe82 100644 --- a/lib-src/update-game-score.c +++ b/lib-src/update-game-score.c @@ -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; } -- 2.39.5