all repos — cgit @ af2e75616d1bfb7dc79d299d10ae0bd39bef47bc

a hyperfast web frontend for git written in c

cache.c: do not ignore errors from print_slot()

If print_slot() fails, the client will be served an inferior response.
This patch makes sure that such an error will be returned to main(), which
in turn will try to inform about the error in the response itself.

The error is also printed to the cache_log, i.e. stderr, which will make
the error message appear in error_log (atleast when httpd==apache).

Noticed-by: Jim Meyering <jim@meyering.net>
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
Lars Hjemli hjemli@gmail.com
Sun, 18 May 2008 23:59:11 +0200
commit

af2e75616d1bfb7dc79d299d10ae0bd39bef47bc

parent

cdc6b2f8e7a8d43dcfe0475a9d3498333ea686b8

2 files changed, 15 insertions(+), 5 deletions(-)

jump to
M cache.ccache.c

@@ -252,9 +252,14 @@ slot->cache_fd = slot->lock_fd;

} } } - print_slot(slot); + if ((err = print_slot(slot)) != 0) { + cache_log("[cgit] error printing cache %s: %s (%d)\n", + slot->cache_name, + strerror(err), + err); + } close_slot(slot); - return 0; + return err; } /* If the cache slot does not exist (or its key doesn't match the

@@ -289,7 +294,12 @@ // Lets avoid such a race by just printing the content of

// the lock file. slot->cache_fd = slot->lock_fd; unlock_slot(slot, 1); - err = print_slot(slot); + if ((err = print_slot(slot)) != 0) { + cache_log("[cgit] error printing cache %s: %s (%d)\n", + slot->cache_name, + strerror(err), + err); + } close_slot(slot); return err; }
M cgit.ccgit.c

@@ -380,7 +380,7 @@ ctx.cfg.cache_size = 0;

err = cache_process(ctx.cfg.cache_size, ctx.cfg.cache_root, ctx.qry.raw, ttl, process_request, &ctx); if (err) - cache_log("[cgit] error %d - %s\n", - err, strerror(err)); + cgit_print_error(fmt("Error processing page: %s (%d)", + strerror(err), err)); return err; }