Skip to content
/ git Public
forked from git/git

Commit

Permalink
credential-cache: ignore "connection refused" errors
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
peff authored and gitster committed Jan 17, 2012
1 parent 06121a0 commit 35a71f1
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion credential-cache.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit 35a71f1

Please sign in to comment.