diff options
author | Jeff King <peff@peff.net> | 2012-01-17 01:02:32 -0500 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2012-01-16 22:15:19 -0800 |
commit | 35a71f1402b40b580d985a9d7e5fb1c9ec4d0232 (patch) | |
tree | 4e37983d9fc85fc63d8ee5731b5da285d7b5b9f0 /credential-cache.c | |
parent | unix-socket: do not let close() or chdir() clobber errno during cleanup (diff) | |
download | tgif-35a71f1402b40b580d985a9d7e5fb1c9ec4d0232.tar.xz |
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 <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'credential-cache.c')
-rw-r--r-- | credential-cache.c | 2 |
1 files changed, 1 insertions, 1 deletions
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); |