mirror of
https://git.proxmox.com/git/libgit2
synced 2025-12-25 19:12:56 +00:00
Fix threading tests when threads disabled
This commit is contained in:
parent
52bb0476a8
commit
3816debc13
20
src/global.c
20
src/global.c
@ -16,8 +16,9 @@ git_mutex git__mwindow_mutex;
|
||||
|
||||
#define MAX_SHUTDOWN_CB 8
|
||||
|
||||
git_global_shutdown_fn git__shutdown_callbacks[MAX_SHUTDOWN_CB];
|
||||
git_atomic git__n_shutdown_callbacks;
|
||||
static git_global_shutdown_fn git__shutdown_callbacks[MAX_SHUTDOWN_CB];
|
||||
static git_atomic git__n_shutdown_callbacks;
|
||||
static git_atomic git__n_inits;
|
||||
|
||||
void git__on_shutdown(git_global_shutdown_fn callback)
|
||||
{
|
||||
@ -74,7 +75,6 @@ static void git__shutdown(void)
|
||||
|
||||
static DWORD _tls_index;
|
||||
static DWORD _mutex = 0;
|
||||
static DWORD _n_inits = 0;
|
||||
|
||||
static int synchronized_threads_init()
|
||||
{
|
||||
@ -101,7 +101,7 @@ int git_threads_init(void)
|
||||
while (InterlockedCompareExchange(&_mutex, 1, 0)) { Sleep(0); }
|
||||
|
||||
/* Only do work on a 0 -> 1 transition of the refcount */
|
||||
if (1 == ++_n_inits)
|
||||
if (1 == git_atomic_inc(&git__n_inits))
|
||||
error = synchronized_threads_init();
|
||||
|
||||
/* Exit the lock */
|
||||
@ -124,7 +124,7 @@ void git_threads_shutdown(void)
|
||||
while (InterlockedCompareExchange(&_mutex, 1, 0)) { Sleep(0); }
|
||||
|
||||
/* Only do work on a 1 -> 0 transition of the refcount */
|
||||
if (0 == --_n_inits)
|
||||
if (0 == git_atomic_dec(&git__n_inits))
|
||||
synchronized_threads_shutdown();
|
||||
|
||||
/* Exit the lock */
|
||||
@ -135,7 +135,7 @@ git_global_st *git__global_state(void)
|
||||
{
|
||||
void *ptr;
|
||||
|
||||
assert(_n_inits);
|
||||
assert(git_atomic_get(&git__n_inits) > 0);
|
||||
|
||||
if ((ptr = TlsGetValue(_tls_index)) != NULL)
|
||||
return ptr;
|
||||
@ -153,7 +153,6 @@ git_global_st *git__global_state(void)
|
||||
|
||||
static pthread_key_t _tls_key;
|
||||
static pthread_once_t _once_init = PTHREAD_ONCE_INIT;
|
||||
static git_atomic git__n_inits;
|
||||
int init_error = 0;
|
||||
|
||||
static void cb__free_status(void *st)
|
||||
@ -204,7 +203,7 @@ git_global_st *git__global_state(void)
|
||||
{
|
||||
void *ptr;
|
||||
|
||||
assert(git__n_inits.val);
|
||||
assert(git_atomic_get(&git__n_inits) > 0);
|
||||
|
||||
if ((ptr = pthread_getspecific(_tls_key)) != NULL)
|
||||
return ptr;
|
||||
@ -224,14 +223,15 @@ static git_global_st __state;
|
||||
|
||||
int git_threads_init(void)
|
||||
{
|
||||
/* noop */
|
||||
git_atomic_inc(&git__n_inits);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void git_threads_shutdown(void)
|
||||
{
|
||||
/* Shut down any subsystems that have global state */
|
||||
git__shutdown();
|
||||
if (0 == git_atomic_dec(&git__n_inits))
|
||||
git__shutdown();
|
||||
}
|
||||
|
||||
git_global_st *git__global_state(void)
|
||||
|
||||
@ -18,11 +18,12 @@ static void run_in_parallel(
|
||||
int r, t, *id = git__calloc(threads, sizeof(int));
|
||||
#ifdef GIT_THREADS
|
||||
git_thread *th = git__calloc(threads, sizeof(git_thread));
|
||||
cl_assert(th != NULL);
|
||||
#else
|
||||
void *th = NULL;
|
||||
#endif
|
||||
|
||||
cl_assert(id != NULL && th != NULL);
|
||||
cl_assert(id != NULL);
|
||||
|
||||
for (r = 0; r < repeats; ++r) {
|
||||
_repo = cl_git_sandbox_reopen(); /* reopen sandbox to flush caches */
|
||||
|
||||
Loading…
Reference in New Issue
Block a user