Commit 4ee2543c by Carlos Martín Nieto

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.
parent 2f6f6ebc
...@@ -186,3 +186,36 @@ void test_refs_iterator__foreach_name_can_cancel(void) ...@@ -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;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment