rename_tmp_log(): limit the number of remote_empty_directories() attempts

This doesn't seem to be a likely error, but we've got the counter anyway, so we might as well use it for an added bit of safety. Please note that the first call to rename() is optimistic, and it is normal for it to fail if there is a directory in the way. So bump the total number of allowed attempts to 4, to be sure that we can still have at least 3 retries in the case of a race. Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Michael Haggerty committed Jan 18, 2014 at 23:49 UTC f1e9e9a4dbe2cfb39dcb14ee4f34628ef46d7b15
1 file changed +2 -2
refs.c
+2 -2
@@ -2530,7 +2530,7 @@ int delete_ref(const char *refname, const unsigned char *sha1, int delopt)
2530
2531 static int rename_tmp_log(const char *newrefname)
2532 {
2533 - int attempts_remaining = 3;
2533 + int attempts_remaining = 4;
2534
2535 retry:
2536 if (safe_create_leading_directories(git_path("logs/%s", newrefname))) {
@@ -2539,7 +2539,7 @@ static int rename_tmp_log(const char *newrefname)
2539 }
2540
2541 if (rename(git_path(TMP_RENAMED_LOG), git_path("logs/%s", newrefname))) {
2542 - if (errno==EISDIR || errno==ENOTDIR) {
2542 + if ((errno==EISDIR || errno==ENOTDIR) && --attempts_remaining > 0) {
2543 /*
2544 * rename(a, b) when b is an existing
2545 * directory ought to result in ISDIR, but