aboutsummaryrefslogtreecommitdiff
diff refs
from: back
to: back
| flip
diff options
context:
space:
mode:
-rw-r--r--cache.c6
-rw-r--r--cgit.c18
-rw-r--r--cgit.h3
3 files changed, 11 insertions, 16 deletions
diff --git a/cache.c b/cache.c
index 0ffa502..b034c48 100644
--- a/cache.c
+++ b/cache.c
@@ -10,7 +10,7 @@
const int NOLOCK = -1;
-void cache_prepare(struct cacheitem *item)
+int cache_lookup(struct cacheitem *item)
{
if (!cgit_query_repo) {
item->name = xstrdup(fmt("%s/index.html", cgit_cache_root));
@@ -30,10 +30,6 @@ void cache_prepare(struct cacheitem *item)
else
item->ttl = cgit_cache_repo_ttl;
}
-}
-
-int cache_exist(struct cacheitem *item)
-{
if (stat(item->name, &item->st)) {
item->st.st_mtime = 0;
return 0;
diff --git a/cgit.c b/cgit.c
index 7f14016..110face 100644
--- a/cgit.c
+++ b/cgit.c
@@ -465,20 +465,20 @@ static void cgit_fill_cache(struct cacheitem *item)
static void cgit_refresh_cache(struct cacheitem *item)
{
- cache_prepare(item);
top:
- if (!cache_exist(item)) {
- if (!cache_lock(item)) {
+ if (!cache_lookup(item)) {
+ if (cache_lock(item)) {
+ cgit_fill_cache(item);
+ cache_unlock(item);
+ } else {
sched_yield();
goto top;
}
- if (!cache_exist(item))
- cgit_fill_cache(item);
- cache_unlock(item);
- } else if (cache_expired(item) && cache_lock(item)) {
- if (cache_expired(item))
+ } else if (cache_expired(item)) {
+ if (cache_lock(item)) {
cgit_fill_cache(item);
- cache_unlock(item);
+ cache_unlock(item);
+ }
}
}
diff --git a/cgit.h b/cgit.h
index 3b0994a..1e084d4 100644
--- a/cgit.h
+++ b/cgit.h
@@ -56,10 +56,9 @@ extern void html_link_close(void);
extern int cgit_read_config(const char *filename, configfn fn);
-extern void cache_prepare(struct cacheitem *item);
+extern int cache_lookup(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);
#endif /* CGIT_H */