mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-04 19:50:19 +00:00
refs: failing test for concurrent ref access
If we remove a reference while we're iterating through the packed refs, the position in the iterator will be off.
This commit is contained in:
parent
2f6f6ebc99
commit
4ee2543c5a
@ -186,3 +186,36 @@ void test_refs_iterator__foreach_name_can_cancel(void)
|
|||||||
-333);
|
-333);
|
||||||
cl_assert_equal_i(0, cancel_after);
|
cl_assert_equal_i(0, cancel_after);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void test_refs_iterator__concurrent_delete(void)
|
||||||
|
{
|
||||||
|
git_reference_iterator *iter;
|
||||||
|
size_t full_count = 0, concurrent_count = 0;
|
||||||
|
const char *name;
|
||||||
|
int error;
|
||||||
|
|
||||||
|
git_repository_free(repo);
|
||||||
|
repo = cl_git_sandbox_init("testrepo");
|
||||||
|
|
||||||
|
cl_git_pass(git_reference_iterator_new(&iter, repo));
|
||||||
|
while ((error = git_reference_next_name(&name, iter)) == 0) {
|
||||||
|
full_count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
git_reference_iterator_free(iter);
|
||||||
|
cl_assert_equal_i(GIT_ITEROVER, error);
|
||||||
|
|
||||||
|
cl_git_pass(git_reference_iterator_new(&iter, repo));
|
||||||
|
while ((error = git_reference_next_name(&name, iter)) == 0) {
|
||||||
|
cl_git_pass(git_reference_remove(repo, name));
|
||||||
|
concurrent_count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
git_reference_iterator_free(iter);
|
||||||
|
cl_assert_equal_i(GIT_ITEROVER, error);
|
||||||
|
|
||||||
|
cl_assert_equal_i(full_count, concurrent_count);
|
||||||
|
|
||||||
|
cl_git_sandbox_cleanup();
|
||||||
|
repo = NULL;
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user