X-Git-Url: https://gitweb.ps.run/ps-cgit/blobdiff_plain/318d106300102c19d114a4ea89265b0a4060d9cb..06fe0c2f47eaf467db8ab1443e61dfa1c280f30a:/cache.c diff --git a/cache.c b/cache.c index 2e1ef8c..39e63a5 100644 --- a/cache.c +++ b/cache.c @@ -74,7 +74,7 @@ int cache_refill_overdue(const char *lockfile) int cache_lock(struct cacheitem *item) { int i = 0; - char *lockfile = fmt("%s.lock", item->name); + char *lockfile = xstrdup(fmt("%s.lock", item->name)); top: if (++i > cgit_max_lock_attempts) @@ -90,6 +90,7 @@ int cache_lock(struct cacheitem *item) cache_refill_overdue(lockfile) && !unlink(lockfile)) goto top; + free(lockfile); return (item->fd > 0); } @@ -99,6 +100,11 @@ int cache_unlock(struct cacheitem *item) return (rename(fmt("%s.lock", item->name), item->name) == 0); } +int cache_cancel_lock(struct cacheitem *item) +{ + return (unlink(fmt("%s.lock", item->name)) == 0); +} + int cache_expired(struct cacheitem *item) { if (item->ttl < 0)