mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-09 15:00:04 +00:00
refdb: remove a check-delete race when removing a loose ref
It does not help us to check whether the file exists before trying to unlink it since it might be gone by the time unlink is called. Instead try to remove it and handle the resulting error if it did not exist.
This commit is contained in:
parent
40ffa07f4f
commit
33248b9edb
@ -1281,15 +1281,14 @@ static int refdb_fs_backend__delete_tail(
|
||||
if (git_buf_joinpath(&loose_path, backend->path, ref_name) < 0)
|
||||
return -1;
|
||||
|
||||
if (git_path_isfile(loose_path.ptr)) {
|
||||
error = p_unlink(loose_path.ptr);
|
||||
loose_deleted = 1;
|
||||
}
|
||||
|
||||
git_buf_free(&loose_path);
|
||||
|
||||
if (error != 0)
|
||||
error = p_unlink(loose_path.ptr);
|
||||
if (error < 0 && errno == ENOENT)
|
||||
error = 0;
|
||||
else if (error < 0)
|
||||
goto cleanup;
|
||||
else if (error == 0)
|
||||
loose_deleted = 1;
|
||||
|
||||
if ((error = packed_reload(backend)) < 0)
|
||||
goto cleanup;
|
||||
@ -1312,6 +1311,7 @@ static int refdb_fs_backend__delete_tail(
|
||||
error = packed_write(backend);
|
||||
|
||||
cleanup:
|
||||
git_buf_free(&loose_path);
|
||||
git_filebuf_cleanup(file);
|
||||
|
||||
return error;
|
||||
|
Loading…
Reference in New Issue
Block a user