summaryrefslogtreecommitdiffabout
Side-by-side diff
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--cache.c6
-rw-r--r--cgit.c16
-rw-r--r--cgit.h3
3 files changed, 15 insertions, 10 deletions
diff --git a/cache.c b/cache.c
index b034c48..0ffa502 100644
--- a/cache.c
+++ b/cache.c
@@ -11,5 +11,5 @@
const int NOLOCK = -1;
-int cache_lookup(struct cacheitem *item)
+void cache_prepare(struct cacheitem *item)
{
if (!cgit_query_repo) {
@@ -31,4 +31,8 @@ int cache_lookup(struct cacheitem *item)
item->ttl = cgit_cache_repo_ttl;
}
+}
+
+int cache_exist(struct cacheitem *item)
+{
if (stat(item->name, &item->st)) {
item->st.st_mtime = 0;
diff --git a/cgit.c b/cgit.c
index 110face..7f14016 100644
--- a/cgit.c
+++ b/cgit.c
@@ -466,18 +466,18 @@ static void cgit_fill_cache(struct cacheitem *item)
static void cgit_refresh_cache(struct cacheitem *item)
{
+ cache_prepare(item);
top:
- if (!cache_lookup(item)) {
- if (cache_lock(item)) {
- cgit_fill_cache(item);
- cache_unlock(item);
- } else {
+ if (!cache_exist(item)) {
+ if (!cache_lock(item)) {
sched_yield();
goto top;
}
- } else if (cache_expired(item)) {
- if (cache_lock(item)) {
+ if (!cache_exist(item))
+ cgit_fill_cache(item);
+ cache_unlock(item);
+ } else if (cache_expired(item) && cache_lock(item)) {
+ if (cache_expired(item))
cgit_fill_cache(item);
cache_unlock(item);
- }
}
}
diff --git a/cgit.h b/cgit.h
index 1e084d4..3b0994a 100644
--- a/cgit.h
+++ b/cgit.h
@@ -57,7 +57,8 @@ extern void html_link_close(void);
extern int cgit_read_config(const char *filename, configfn fn);
-extern int cache_lookup(struct cacheitem *item);
+extern void cache_prepare(struct cacheitem *item);
extern int cache_lock(struct cacheitem *item);
extern int cache_unlock(struct cacheitem *item);
+extern int cache_exist(struct cacheitem *item);
extern int cache_expired(struct cacheitem *item);