mirror of
https://git.proxmox.com/git/libgit2
synced 2026-01-04 03:14:41 +00:00
Merge pull request #637 from nulltoken/issue/odb-refcount
Fix git_repository_set_odb() refcount issue
This commit is contained in:
commit
4795807ad5
@ -552,6 +552,7 @@ void git_repository_set_odb(git_repository *repo, git_odb *odb)
|
||||
|
||||
repo->_odb = odb;
|
||||
GIT_REFCOUNT_OWN(repo->_odb, repo);
|
||||
GIT_REFCOUNT_INC(odb);
|
||||
}
|
||||
|
||||
int git_repository_index__weakptr(git_index **out, git_repository *repo)
|
||||
|
||||
@ -68,3 +68,19 @@ void test_repo_getters__head_orphan(void)
|
||||
git_reference_free(ref);
|
||||
git_repository_free(repo);
|
||||
}
|
||||
|
||||
void test_repo_getters__retrieving_the_odb_honors_the_refcount(void)
|
||||
{
|
||||
git_odb *odb;
|
||||
git_repository *repo;
|
||||
|
||||
cl_git_pass(git_repository_open(&repo, "testrepo.git"));
|
||||
|
||||
cl_git_pass(git_repository_odb(&odb, repo));
|
||||
cl_assert(((git_refcount *)odb)->refcount == 2);
|
||||
|
||||
git_repository_free(repo);
|
||||
cl_assert(((git_refcount *)odb)->refcount == 1);
|
||||
|
||||
git_odb_free(odb);
|
||||
}
|
||||
|
||||
@ -57,3 +57,24 @@ void test_repo_setters__setting_a_new_index_on_a_repo_which_has_already_loaded_o
|
||||
*/
|
||||
repo = NULL;
|
||||
}
|
||||
|
||||
void test_repo_setters__setting_a_new_odb_on_a_repo_which_already_loaded_one_properly_honors_the_refcount(void)
|
||||
{
|
||||
git_odb *new_odb;
|
||||
|
||||
cl_git_pass(git_odb_open(&new_odb, "./testrepo.git/objects"));
|
||||
cl_assert(((git_refcount *)new_odb)->refcount == 1);
|
||||
|
||||
git_repository_set_odb(repo, new_odb);
|
||||
cl_assert(((git_refcount *)new_odb)->refcount == 2);
|
||||
|
||||
git_repository_free(repo);
|
||||
cl_assert(((git_refcount *)new_odb)->refcount == 1);
|
||||
|
||||
git_odb_free(new_odb);
|
||||
|
||||
/*
|
||||
* Ensure the cleanup method won't try to free the repo as it's already been taken care of
|
||||
*/
|
||||
repo = NULL;
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user