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).
Unified · Split
| @@ -252,9 +252,14 @@ static int process_slot(struct cache_slot *slot) · 251 unmodified lines | |||
| 252 | } | 252 | } |
| 253 | } | 253 | } |
| 254 | } | 254 | } |
| 255 | print_slot(slot); | 255 | if ((err = print_slot(slot)) != 0) { |
| 256 | cache_log("[cgit] error printing cache %s: %s (%d)\n", | ||
| 257 | slot->cache_name, | ||
| 258 | strerror(err), | ||
| 259 | err); | ||
| 260 | } | ||
| 256 | close_slot(slot); | 261 | close_slot(slot); |
| 257 | return 0; | 262 | return err; |
| 258 | } | 263 | } |
| 259 | 264 | ||
| 260 | /* If the cache slot does not exist (or its key doesn't match the | 265 | /* 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) · 28 unmodified lines | |||
| 289 | // the lock file. | 294 | // the lock file. |
| 290 | slot->cache_fd = slot->lock_fd; | 295 | slot->cache_fd = slot->lock_fd; |
| 291 | unlock_slot(slot, 1); | 296 | unlock_slot(slot, 1); |
| 292 | err = print_slot(slot); | 297 | if ((err = print_slot(slot)) != 0) { |
| 298 | cache_log("[cgit] error printing cache %s: %s (%d)\n", | ||
| 299 | slot->cache_name, | ||
| 300 | strerror(err), | ||
| 301 | err); | ||
| 302 | } | ||
| 293 | close_slot(slot); | 303 | close_slot(slot); |
| 294 | return err; | 304 | return err; |
| 295 | } | 305 | } |
| @@ -380,7 +380,7 @@ int main(int argc, const char **argv) · 379 unmodified lines | |||
| 380 | err = cache_process(ctx.cfg.cache_size, ctx.cfg.cache_root, | 380 | err = cache_process(ctx.cfg.cache_size, ctx.cfg.cache_root, |
| 381 | ctx.qry.raw, ttl, process_request, &ctx); | 381 | ctx.qry.raw, ttl, process_request, &ctx); |
| 382 | if (err) | 382 | if (err) |
| 383 | cache_log("[cgit] error %d - %s\n", | 383 | cgit_print_error(fmt("Error processing page: %s (%d)", |
| 384 | err, strerror(err)); | 384 | strerror(err), err)); |
| 385 | return err; | 385 | return err; |
| 386 | } | 386 | } |