summaryrefslogtreecommitdiffabout
path: root/cgit.h
authorLars Hjemli <hjemli@gmail.com>2006-12-11 21:53:50 (UTC)
committer Lars Hjemli <hjemli@gmail.com>2006-12-11 21:53:50 (UTC)
commitfbaf1171b4e343929dd43ecac7cd9d1c692b84ec (patch) (unidiff)
tree40b7007b2e1e85f2e91e052b33555df2e9fb5e14 /cgit.h
parent44923f8953c66dc9b852316b655ab3b5aec9478e (diff)
downloadcgit-fbaf1171b4e343929dd43ecac7cd9d1c692b84ec.zip
cgit-fbaf1171b4e343929dd43ecac7cd9d1c692b84ec.tar.gz
cgit-fbaf1171b4e343929dd43ecac7cd9d1c692b84ec.tar.bz2
Don't truncate valid cachefiles
An embarrassing thinko in cgit_check_cache() would truncate valid cachefiles in the following situation: 1) process A notices a missing/expired cachefile 2) process B gets scheduled, locks, fills and unlocks the cachefile 3) process A gets scheduled, locks the cachefile, notices that the cachefile now exist/is not expired anymore, and continues to overwrite it with an empty lockfile. Thanks to Linus for noticing (again). Signed-off-by: Lars Hjemli <hjemli@gmail.com>
Diffstat (limited to 'cgit.h') (more/less context) (ignore whitespace changes)
-rw-r--r--cgit.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/cgit.h b/cgit.h
index c1dcc97..c9554a7 100644
--- a/cgit.h
+++ b/cgit.h
@@ -21,66 +21,67 @@ extern char *cgit_root;
21extern char *cgit_root_title; 21extern char *cgit_root_title;
22extern char *cgit_css; 22extern char *cgit_css;
23extern char *cgit_logo; 23extern char *cgit_logo;
24extern char *cgit_logo_link; 24extern char *cgit_logo_link;
25extern char *cgit_virtual_root; 25extern char *cgit_virtual_root;
26extern char *cgit_cache_root; 26extern char *cgit_cache_root;
27 27
28extern int cgit_max_lock_attempts; 28extern int cgit_max_lock_attempts;
29extern int cgit_cache_root_ttl; 29extern int cgit_cache_root_ttl;
30extern int cgit_cache_repo_ttl; 30extern int cgit_cache_repo_ttl;
31extern int cgit_cache_dynamic_ttl; 31extern int cgit_cache_dynamic_ttl;
32extern int cgit_cache_static_ttl; 32extern int cgit_cache_static_ttl;
33extern int cgit_cache_max_create_time; 33extern int cgit_cache_max_create_time;
34 34
35extern char *cgit_repo_name; 35extern char *cgit_repo_name;
36extern char *cgit_repo_desc; 36extern char *cgit_repo_desc;
37extern char *cgit_repo_owner; 37extern char *cgit_repo_owner;
38 38
39extern int cgit_query_has_symref; 39extern int cgit_query_has_symref;
40extern int cgit_query_has_sha1; 40extern int cgit_query_has_sha1;
41 41
42extern char *cgit_querystring; 42extern char *cgit_querystring;
43extern char *cgit_query_repo; 43extern char *cgit_query_repo;
44extern char *cgit_query_page; 44extern char *cgit_query_page;
45extern char *cgit_query_head; 45extern char *cgit_query_head;
46extern char *cgit_query_sha1; 46extern char *cgit_query_sha1;
47 47
48extern int htmlfd; 48extern int htmlfd;
49 49
50extern void cgit_global_config_cb(const char *name, const char *value); 50extern void cgit_global_config_cb(const char *name, const char *value);
51extern void cgit_repo_config_cb(const char *name, const char *value); 51extern void cgit_repo_config_cb(const char *name, const char *value);
52extern void cgit_querystring_cb(const char *name, const char *value); 52extern void cgit_querystring_cb(const char *name, const char *value);
53 53
54extern char *fmt(const char *format,...); 54extern char *fmt(const char *format,...);
55 55
56extern void html(const char *txt); 56extern void html(const char *txt);
57extern void htmlf(const char *format,...); 57extern void htmlf(const char *format,...);
58extern void html_txt(char *txt); 58extern void html_txt(char *txt);
59extern void html_attr(char *txt); 59extern void html_attr(char *txt);
60extern void html_link_open(char *url, char *title, char *class); 60extern void html_link_open(char *url, char *title, char *class);
61extern void html_link_close(void); 61extern void html_link_close(void);
62 62
63extern int cgit_read_config(const char *filename, configfn fn); 63extern int cgit_read_config(const char *filename, configfn fn);
64extern int cgit_parse_query(char *txt, configfn fn); 64extern int cgit_parse_query(char *txt, configfn fn);
65 65
66extern void cache_prepare(struct cacheitem *item); 66extern void cache_prepare(struct cacheitem *item);
67extern int cache_lock(struct cacheitem *item); 67extern int cache_lock(struct cacheitem *item);
68extern int cache_unlock(struct cacheitem *item); 68extern int cache_unlock(struct cacheitem *item);
69extern int cache_cancel_lock(struct cacheitem *item);
69extern int cache_exist(struct cacheitem *item); 70extern int cache_exist(struct cacheitem *item);
70extern int cache_expired(struct cacheitem *item); 71extern int cache_expired(struct cacheitem *item);
71 72
72extern char *cgit_repourl(const char *reponame); 73extern char *cgit_repourl(const char *reponame);
73extern char *cgit_pageurl(const char *reponame, const char *pagename, 74extern char *cgit_pageurl(const char *reponame, const char *pagename,
74 const char *query); 75 const char *query);
75 76
76extern void cgit_print_error(char *msg); 77extern void cgit_print_error(char *msg);
77extern void cgit_print_docstart(char *title, struct cacheitem *item); 78extern void cgit_print_docstart(char *title, struct cacheitem *item);
78extern void cgit_print_docend(); 79extern void cgit_print_docend();
79extern void cgit_print_pageheader(char *title); 80extern void cgit_print_pageheader(char *title);
80 81
81extern void cgit_print_repolist(struct cacheitem *item); 82extern void cgit_print_repolist(struct cacheitem *item);
82extern void cgit_print_summary(); 83extern void cgit_print_summary();
83extern void cgit_print_log(const char *tip, int ofs, int cnt); 84extern void cgit_print_log(const char *tip, int ofs, int cnt);
84extern void cgit_print_view(char *hex); 85extern void cgit_print_view(char *hex);
85 86
86#endif /* CGIT_H */ 87#endif /* CGIT_H */