summaryrefslogtreecommitdiffabout
path: root/cgit.c
Unidiff
Diffstat (limited to 'cgit.c') (more/less context) (ignore whitespace changes)
-rw-r--r--cgit.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/cgit.c b/cgit.c
index 110face..7f14016 100644
--- a/cgit.c
+++ b/cgit.c
@@ -444,62 +444,62 @@ static void cgit_print_repo_page()
444 cgit_print_docstart(title); 444 cgit_print_docstart(title);
445 cgit_print_pageheader(title); 445 cgit_print_pageheader(title);
446 if (!cgit_query_page) 446 if (!cgit_query_page)
447 cgit_print_repo_summary(); 447 cgit_print_repo_summary();
448 else if (!strcmp(cgit_query_page, "log")) { 448 else if (!strcmp(cgit_query_page, "log")) {
449 cgit_print_log(cgit_query_head, 0, 100); 449 cgit_print_log(cgit_query_head, 0, 100);
450 } else if (!strcmp(cgit_query_page, "view")) { 450 } else if (!strcmp(cgit_query_page, "view")) {
451 cgit_print_object(cgit_query_sha1); 451 cgit_print_object(cgit_query_sha1);
452 } 452 }
453 cgit_print_docend(); 453 cgit_print_docend();
454} 454}
455 455
456static void cgit_fill_cache(struct cacheitem *item) 456static void cgit_fill_cache(struct cacheitem *item)
457{ 457{
458 htmlfd = item->fd; 458 htmlfd = item->fd;
459 item->st.st_mtime = time(NULL); 459 item->st.st_mtime = time(NULL);
460 if (cgit_query_repo) 460 if (cgit_query_repo)
461 cgit_print_repo_page(); 461 cgit_print_repo_page();
462 else 462 else
463 cgit_print_repolist(); 463 cgit_print_repolist();
464} 464}
465 465
466static void cgit_refresh_cache(struct cacheitem *item) 466static void cgit_refresh_cache(struct cacheitem *item)
467{ 467{
468 cache_prepare(item);
468 top: 469 top:
469 if (!cache_lookup(item)) { 470 if (!cache_exist(item)) {
470 if (cache_lock(item)) { 471 if (!cache_lock(item)) {
471 cgit_fill_cache(item);
472 cache_unlock(item);
473 } else {
474 sched_yield(); 472 sched_yield();
475 goto top; 473 goto top;
476 } 474 }
477 } else if (cache_expired(item)) { 475 if (!cache_exist(item))
478 if (cache_lock(item)) {
479 cgit_fill_cache(item); 476 cgit_fill_cache(item);
480 cache_unlock(item); 477 cache_unlock(item);
481 } 478 } else if (cache_expired(item) && cache_lock(item)) {
479 if (cache_expired(item))
480 cgit_fill_cache(item);
481 cache_unlock(item);
482 } 482 }
483} 483}
484 484
485static void cgit_print_cache(struct cacheitem *item) 485static void cgit_print_cache(struct cacheitem *item)
486{ 486{
487 static char buf[4096]; 487 static char buf[4096];
488 ssize_t i; 488 ssize_t i;
489 489
490 int fd = open(item->name, O_RDONLY); 490 int fd = open(item->name, O_RDONLY);
491 if (fd<0) 491 if (fd<0)
492 die("Unable to open cached file %s", item->name); 492 die("Unable to open cached file %s", item->name);
493 493
494 while((i=read(fd, buf, sizeof(buf))) > 0) 494 while((i=read(fd, buf, sizeof(buf))) > 0)
495 write(STDOUT_FILENO, buf, i); 495 write(STDOUT_FILENO, buf, i);
496 496
497 close(fd); 497 close(fd);
498} 498}
499 499
500int main(int argc, const char **argv) 500int main(int argc, const char **argv)
501{ 501{
502 cgit_read_config("/etc/cgitrc", cgit_global_config_cb); 502 cgit_read_config("/etc/cgitrc", cgit_global_config_cb);
503 cgit_querystring = xstrdup(getenv("QUERY_STRING")); 503 cgit_querystring = xstrdup(getenv("QUERY_STRING"));
504 cgit_parse_query(cgit_querystring, cgit_querystring_cb); 504 cgit_parse_query(cgit_querystring, cgit_querystring_cb);
505 cgit_refresh_cache(&cacheitem); 505 cgit_refresh_cache(&cacheitem);