summaryrefslogtreecommitdiffabout
path: root/cgit.c
Unidiff
Diffstat (limited to 'cgit.c') (more/less context) (ignore whitespace changes)
-rw-r--r--cgit.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/cgit.c b/cgit.c
index d1abaa0..0f72f2d 100644
--- a/cgit.c
+++ b/cgit.c
@@ -52,31 +52,37 @@ static void cgit_check_cache(struct cacheitem *item)
52 52
53 cache_prepare(item); 53 cache_prepare(item);
54 top: 54 top:
55 if (++i > cgit_max_lock_attempts) { 55 if (++i > cgit_max_lock_attempts) {
56 die("cgit_refresh_cache: unable to lock %s: %s", 56 die("cgit_refresh_cache: unable to lock %s: %s",
57 item->name, strerror(errno)); 57 item->name, strerror(errno));
58 } 58 }
59 if (!cache_exist(item)) { 59 if (!cache_exist(item)) {
60 if (!cache_lock(item)) { 60 if (!cache_lock(item)) {
61 sleep(1); 61 sleep(1);
62 goto top; 62 goto top;
63 } 63 }
64 if (!cache_exist(item)) 64 if (!cache_exist(item)) {
65 cgit_fill_cache(item); 65 cgit_fill_cache(item);
66 cache_unlock(item); 66 cache_unlock(item);
67 } else {
68 cache_cancel_lock(item);
69 }
67 } else if (cache_expired(item) && cache_lock(item)) { 70 } else if (cache_expired(item) && cache_lock(item)) {
68 if (cache_expired(item)) 71 if (cache_expired(item)) {
69 cgit_fill_cache(item); 72 cgit_fill_cache(item);
70 cache_unlock(item); 73 cache_unlock(item);
74 } else {
75 cache_cancel_lock(item);
76 }
71 } 77 }
72} 78}
73 79
74static void cgit_print_cache(struct cacheitem *item) 80static void cgit_print_cache(struct cacheitem *item)
75{ 81{
76 static char buf[4096]; 82 static char buf[4096];
77 ssize_t i; 83 ssize_t i;
78 84
79 int fd = open(item->name, O_RDONLY); 85 int fd = open(item->name, O_RDONLY);
80 if (fd<0) 86 if (fd<0)
81 die("Unable to open cached file %s", item->name); 87 die("Unable to open cached file %s", item->name);
82 88