From 8ec6c8d79567a71ca3c6f1ec73eb453d371b1ade Mon Sep 17 00:00:00 2001 From: Jeff King Date: Mon, 9 Jan 2012 23:57:33 -0500 Subject: credential-cache: report more daemon connection errors Originally, this code remained relatively silent when we failed to connect to the cache. The idea was that it was simply a cache, and we didn't want to bother the user with temporary failures (the worst case is that we would simply ask their password again). However, if you have a configuration failure or other problem, it is helpful for the daemon to report those problems. Git will happily ignore the failed error code, but the extra information to stderr can help the user diagnose the problem. Signed-off-by: Jeff King Signed-off-by: Junio C Hamano --- credential-cache.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'credential-cache.c') diff --git a/credential-cache.c b/credential-cache.c index b15a9a7449..193301877f 100644 --- a/credential-cache.c +++ b/credential-cache.c @@ -71,10 +71,14 @@ static void do_cache(const char *socket, const char *action, int timeout, die_errno("unable to relay credential"); } - if (send_request(socket, &buf) < 0 && (flags & FLAG_SPAWN)) { - spawn_daemon(socket); - if (send_request(socket, &buf) < 0) + if (send_request(socket, &buf) < 0) { + if (errno != ENOENT) die_errno("unable to connect to cache daemon"); + if (flags & FLAG_SPAWN) { + spawn_daemon(socket); + if (send_request(socket, &buf) < 0) + die_errno("unable to connect to cache daemon"); + } } strbuf_release(&buf); } -- cgit v1.3-5-g9baa From 35a71f1402b40b580d985a9d7e5fb1c9ec4d0232 Mon Sep 17 00:00:00 2001 From: Jeff King Date: Tue, 17 Jan 2012 01:02:32 -0500 Subject: credential-cache: ignore "connection refused" errors The credential-cache helper will try to connect to its daemon over a unix socket. Originally, a failure to do so was silently ignored, and we would either give up (if performing a "get" or "erase" operation), or spawn a new daemon (for a "store" operation). But since 8ec6c8d, we try to report more errors. We detect a missing daemon by checking for ENOENT on our connection attempt. If the daemon is missing, we continue as before (giving up or spawning a new daemon). For any other error, we die and report the problem. However, checking for ENOENT is not sufficient for a missing daemon. We might also get ECONNREFUSED if a dead daemon process left a stale socket. This generally shouldn't happen, as the daemon cleans up after itself, but the daemon may not always be given a chance to do so (e.g., power loss, "kill -9"). The resulting state is annoying not just because the helper outputs an extra useless message, but because it actually blocks the helper from spawning a new daemon to replace the stale socket. Fix it by checking for ECONNREFUSED. Signed-off-by: Jeff King Signed-off-by: Junio C Hamano --- credential-cache.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'credential-cache.c') diff --git a/credential-cache.c b/credential-cache.c index 193301877f..9a03792c7d 100644 --- a/credential-cache.c +++ b/credential-cache.c @@ -72,7 +72,7 @@ static void do_cache(const char *socket, const char *action, int timeout, } if (send_request(socket, &buf) < 0) { - if (errno != ENOENT) + if (errno != ENOENT && errno != ECONNREFUSED) die_errno("unable to connect to cache daemon"); if (flags & FLAG_SPAWN) { spawn_daemon(socket); -- cgit v1.3-5-g9baa