mirror of
https://git.proxmox.com/git/libgit2
synced 2025-06-21 08:55:06 +00:00
tests: core: test deinitialization and concurrent initialization
Exercise the logic surrounding deinitialization of the libgit2 library as well as repeated concurrent de- and reinitialization. This tries to catch races and makes sure that it is possible to reinitialize libgit2 multiple times. After deinitializing libgit2, we have to make sure to setup options required for testing. Currently, this only includes setting up the configuration search path again. Before, this has been set up once in `tests/main.c`.
This commit is contained in:
parent
038f0e1b4c
commit
1c33ecc445
@ -12,3 +12,43 @@ void test_core_init__returns_count(void)
|
||||
cl_assert_equal_i(1, git_libgit2_shutdown());
|
||||
}
|
||||
|
||||
void test_core_init__reinit_succeeds(void)
|
||||
{
|
||||
cl_assert_equal_i(0, git_libgit2_shutdown());
|
||||
cl_assert_equal_i(1, git_libgit2_init());
|
||||
cl_sandbox_set_search_path_defaults();
|
||||
}
|
||||
|
||||
#ifdef GIT_THREADS
|
||||
static void *reinit(void *unused)
|
||||
{
|
||||
unsigned i;
|
||||
|
||||
for (i = 0; i < 20; i++) {
|
||||
cl_assert(git_libgit2_init() > 0);
|
||||
cl_assert(git_libgit2_shutdown() >= 0);
|
||||
}
|
||||
|
||||
return unused;
|
||||
}
|
||||
#endif
|
||||
|
||||
void test_core_init__concurrent_init_succeeds(void)
|
||||
{
|
||||
#ifdef GIT_THREADS
|
||||
git_thread threads[10];
|
||||
unsigned i;
|
||||
|
||||
cl_assert_equal_i(0, git_libgit2_shutdown());
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(threads); i++)
|
||||
git_thread_create(&threads[i], reinit, NULL);
|
||||
for (i = 0; i < ARRAY_SIZE(threads); i++)
|
||||
git_thread_join(&threads[i], NULL);
|
||||
|
||||
cl_assert_equal_i(1, git_libgit2_init());
|
||||
cl_sandbox_set_search_path_defaults();
|
||||
#else
|
||||
cl_skip();
|
||||
#endif
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user