cgit

commit af2e75616d1bfb7dc79d299d10ae0bd39bef47bc

Author: Lars Hjemli <hjemli@gmail.com>

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>

 cache.c | 16 +++++++++++++---
 cgit.c | 4 ++--


diff --git a/cache.c b/cache.c
index a99610982999fef1cf1c116353912ad2d08b854f..aa97ae19aad496fcf134d46b5e57c431389a39e2 100644
--- a/cache.c
+++ b/cache.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;
 }




diff --git a/cgit.c b/cgit.c
index 2036ceb0ee427fb37054033ecc21e74655104d06..ac882c34ef1ea9baa91cb874f0fb846abcf65824 100644
--- a/cgit.c
+++ b/cgit.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;
 }