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>
This commit is contained in:
父節點
cdc6b2f8e7
當前提交
af2e75616d
16
cache.c
16
cache.c
@ -252,9 +252,14 @@ static int process_slot(struct cache_slot *slot)
|
||||
}
|
||||
}
|
||||
}
|
||||
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 @@ static int process_slot(struct cache_slot *slot)
|
||||
// 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;
|
||||
}
|
||||
|
4
cgit.c
4
cgit.c
@ -380,7 +380,7 @@ int main(int argc, const char **argv)
|
||||
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;
|
||||
}
|
||||
|
載入中…
新增問題並參考
Block a user