about summary refs log tree commit diff
diff options
context:
space:
mode:
authorLars Hjemli <hjemli@gmail.com>2008-05-18 23:59:11 +0200
committerLars Hjemli <hjemli@gmail.com>2008-05-18 23:59:11 +0200
commitaf2e75616d1bfb7dc79d299d10ae0bd39bef47bc (patch)
tree6330a6f9bc1b2b16434df055ee48129e2e3b827e
parentcache.c: use xread()/xwrite() from libgit (diff)
downloadcgit-pink-af2e75616d1bfb7dc79d299d10ae0bd39bef47bc.tar.gz
cgit-pink-af2e75616d1bfb7dc79d299d10ae0bd39bef47bc.zip
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>
Diffstat (limited to '')
-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)
 				}
 			}
 		}
-		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;
 }
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)
 	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;
 }