diff options
Diffstat (limited to 'refs')
-rw-r--r-- | refs/files-backend.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/refs/files-backend.c b/refs/files-backend.c index 087a8fa02..245556435 100644 --- a/refs/files-backend.c +++ b/refs/files-backend.c @@ -1451,6 +1451,7 @@ int read_raw_ref(const char *refname, unsigned char *sha1, int fd; int ret = -1; int save_errno; + int remaining_retries = 3; *type = 0; strbuf_reset(&sb_path); @@ -1466,8 +1467,14 @@ stat_ref: * <-> symlink) between the lstat() and reading, then * we don't want to report that as an error but rather * try again starting with the lstat(). + * + * We'll keep a count of the retries, though, just to avoid + * any confusing situation sending us into an infinite loop. */ + if (remaining_retries-- <= 0) + goto out; + if (lstat(path, &st) < 0) { if (errno != ENOENT) goto out; |