Merge branch 'mh/ref-lock-entry'
The code to acquire a lock on a reference (e.g. while accepting a push from a client) used to immediately fail when the reference is already locked---now it waits for a very short while and retries, which can make it succeed if the lock holder was holding it during a read-only operation. * mh/ref-lock-entry: refs: retry acquiring reference locks for 100ms
This commit is contained in:
@ -537,7 +537,9 @@ retry:
|
||||
if (!lock->lk)
|
||||
lock->lk = xcalloc(1, sizeof(struct lock_file));
|
||||
|
||||
if (hold_lock_file_for_update(lock->lk, ref_file.buf, LOCK_NO_DEREF) < 0) {
|
||||
if (hold_lock_file_for_update_timeout(
|
||||
lock->lk, ref_file.buf, LOCK_NO_DEREF,
|
||||
get_files_ref_lock_timeout_ms()) < 0) {
|
||||
if (errno == ENOENT && --attempts_remaining > 0) {
|
||||
/*
|
||||
* Maybe somebody just deleted one of the
|
||||
@ -865,7 +867,9 @@ static int create_reflock(const char *path, void *cb)
|
||||
{
|
||||
struct lock_file *lk = cb;
|
||||
|
||||
return hold_lock_file_for_update(lk, path, LOCK_NO_DEREF) < 0 ? -1 : 0;
|
||||
return hold_lock_file_for_update_timeout(
|
||||
lk, path, LOCK_NO_DEREF,
|
||||
get_files_ref_lock_timeout_ms()) < 0 ? -1 : 0;
|
||||
}
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user