aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Lars Hjemli <hjemli@gmail.com>2008-05-19 06:59:11 (JST)
committerGravatar Lars Hjemli <hjemli@gmail.com>2008-05-19 06:59:11 (JST)
commitaf2e75616d1bfb7dc79d299d10ae0bd39bef47bc (patch)
tree6330a6f9bc1b2b16434df055ee48129e2e3b827e
parentcdc6b2f8e7a8d43dcfe0475a9d3498333ea686b8 (diff)
downloadcgit-af2e75616d1bfb7dc79d299d10ae0bd39bef47bc.zip
cgit-af2e75616d1bfb7dc79d299d10ae0bd39bef47bc.tar.gz
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>
-rw-r--r--cache.c16
-rw-r--r--cgit.c4
2 files changed, 15 insertions, 5 deletions
diff --git a/cache.c b/cache.c
index a996109..aa97ae1 100644
--- a/cache.c
+++ b/cache.c
@@ -252,9 +252,14 @@ static int process_slot(struct cache_slot *slot)
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)
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}
diff --git a/cgit.c b/cgit.c
index 2036ceb..ac882c3 100644
--- a/cgit.c
+++ b/cgit.c
@@ -380,7 +380,7 @@ int main(int argc, const char **argv)
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}