When holding the lock for rewriting the credential file, use a timeout to avoid race conditions when the credentials file needs to be updated in parallel. An example would be doing `fetch --all` on a repository with several remotes that need credentials, using parallel fetching. The timeout is hardcoded to 1 second, since this is just to solve a race condition. This was reported here: https://lore.kernel.org/git/20201029192020.mcri76ylbdure2o7@safonso-t430/ --- builtin/credential-store.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/builtin/credential-store.c b/builtin/credential-store.c index 5331ab151..acff4abae 100644 --- a/builtin/credential-store.c +++ b/builtin/credential-store.c @@ -58,8 +58,9 @@ static void print_line(struct strbuf *buf) static void rewrite_credential_file(const char *fn, struct credential *c, struct strbuf *extra) { - if (hold_lock_file_for_update(&credential_lock, fn, 0) < 0) - die_errno("unable to get credential storage lock"); + static long timeout = 1000; + if (hold_lock_file_for_update_timeout(&credential_lock, fn, 0, timeout) < 0) + die_errno("unable to get credential storage lock in %ld ms", timeout); if (extra) print_line(extra); parse_credential_file(fn, c, NULL, print_line); -- 2.29.1