author | Lars Hjemli <hjemli@gmail.com> | 2006-12-11 11:10:12 (UTC) |
---|---|---|
committer | Lars Hjemli <hjemli@gmail.com> | 2006-12-11 11:10:12 (UTC) |
commit | 318d106300102c19d114a4ea89265b0a4060d9cb (patch) (unidiff) | |
tree | 3752575abec74ee0a2b544e36e3cc8f9cdfa1e66 /cgit.h | |
parent | a581ed8d6c15b0734b082fbadf0a907c2b170423 (diff) | |
download | cgit-318d106300102c19d114a4ea89265b0a4060d9cb.zip cgit-318d106300102c19d114a4ea89265b0a4060d9cb.tar.gz cgit-318d106300102c19d114a4ea89265b0a4060d9cb.tar.bz2 |
Avoid infinite loops in caching layer
Add a global variable, cgit_max_lock_attemps, to avoid the possibility of
infinite loops when failing to acquire a lockfile. This could happen on
broken setups or under crazy server load.
Incidentally, this also fixes a lurking bug in cache_lock() where an
uninitialized returnvalue was used.
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
-rw-r--r-- | cgit.h | 1 |
1 files changed, 1 insertions, 0 deletions
@@ -1,65 +1,66 @@ | |||
1 | #ifndef CGIT_H | 1 | #ifndef CGIT_H |
2 | #define CGIT_H | 2 | #define CGIT_H |
3 | 3 | ||
4 | #include "git.h" | 4 | #include "git.h" |
5 | #include <openssl/sha.h> | 5 | #include <openssl/sha.h> |
6 | #include <ctype.h> | 6 | #include <ctype.h> |
7 | #include <sched.h> | 7 | #include <sched.h> |
8 | 8 | ||
9 | typedef void (*configfn)(const char *name, const char *value); | 9 | typedef void (*configfn)(const char *name, const char *value); |
10 | 10 | ||
11 | struct cacheitem { | 11 | struct cacheitem { |
12 | char *name; | 12 | char *name; |
13 | struct stat st; | 13 | struct stat st; |
14 | int ttl; | 14 | int ttl; |
15 | int fd; | 15 | int fd; |
16 | }; | 16 | }; |
17 | 17 | ||
18 | extern char *cgit_root; | 18 | extern char *cgit_root; |
19 | extern char *cgit_root_title; | 19 | extern char *cgit_root_title; |
20 | extern char *cgit_css; | 20 | extern char *cgit_css; |
21 | extern char *cgit_logo; | 21 | extern char *cgit_logo; |
22 | extern char *cgit_logo_link; | 22 | extern char *cgit_logo_link; |
23 | extern char *cgit_virtual_root; | 23 | extern char *cgit_virtual_root; |
24 | extern char *cgit_cache_root; | 24 | extern char *cgit_cache_root; |
25 | 25 | ||
26 | extern int cgit_max_lock_attempts; | ||
26 | extern int cgit_cache_root_ttl; | 27 | extern int cgit_cache_root_ttl; |
27 | extern int cgit_cache_repo_ttl; | 28 | extern int cgit_cache_repo_ttl; |
28 | extern int cgit_cache_dynamic_ttl; | 29 | extern int cgit_cache_dynamic_ttl; |
29 | extern int cgit_cache_static_ttl; | 30 | extern int cgit_cache_static_ttl; |
30 | extern int cgit_cache_max_create_time; | 31 | extern int cgit_cache_max_create_time; |
31 | 32 | ||
32 | extern char *cgit_repo_name; | 33 | extern char *cgit_repo_name; |
33 | extern char *cgit_repo_desc; | 34 | extern char *cgit_repo_desc; |
34 | extern char *cgit_repo_owner; | 35 | extern char *cgit_repo_owner; |
35 | 36 | ||
36 | extern int cgit_query_has_symref; | 37 | extern int cgit_query_has_symref; |
37 | extern int cgit_query_has_sha1; | 38 | extern int cgit_query_has_sha1; |
38 | 39 | ||
39 | extern char *cgit_querystring; | 40 | extern char *cgit_querystring; |
40 | extern char *cgit_query_repo; | 41 | extern char *cgit_query_repo; |
41 | extern char *cgit_query_page; | 42 | extern char *cgit_query_page; |
42 | extern char *cgit_query_head; | 43 | extern char *cgit_query_head; |
43 | extern char *cgit_query_sha1; | 44 | extern char *cgit_query_sha1; |
44 | 45 | ||
45 | extern int htmlfd; | 46 | extern int htmlfd; |
46 | 47 | ||
47 | extern char *fmt(const char *format,...); | 48 | extern char *fmt(const char *format,...); |
48 | 49 | ||
49 | extern void html(const char *txt); | 50 | extern void html(const char *txt); |
50 | extern void htmlf(const char *format,...); | 51 | extern void htmlf(const char *format,...); |
51 | extern void html_txt(char *txt); | 52 | extern void html_txt(char *txt); |
52 | extern void html_attr(char *txt); | 53 | extern void html_attr(char *txt); |
53 | extern void html_link_open(char *url, char *title, char *class); | 54 | extern void html_link_open(char *url, char *title, char *class); |
54 | extern void html_link_close(void); | 55 | extern void html_link_close(void); |
55 | 56 | ||
56 | 57 | ||
57 | extern int cgit_read_config(const char *filename, configfn fn); | 58 | extern int cgit_read_config(const char *filename, configfn fn); |
58 | 59 | ||
59 | extern void cache_prepare(struct cacheitem *item); | 60 | extern void cache_prepare(struct cacheitem *item); |
60 | extern int cache_lock(struct cacheitem *item); | 61 | extern int cache_lock(struct cacheitem *item); |
61 | extern int cache_unlock(struct cacheitem *item); | 62 | extern int cache_unlock(struct cacheitem *item); |
62 | extern int cache_exist(struct cacheitem *item); | 63 | extern int cache_exist(struct cacheitem *item); |
63 | extern int cache_expired(struct cacheitem *item); | 64 | extern int cache_expired(struct cacheitem *item); |
64 | 65 | ||
65 | #endif /* CGIT_H */ | 66 | #endif /* CGIT_H */ |