#include "clar_libgit2.h" #include "thread_helpers.h" void run_in_parallel( int repeats, int threads, void *(*func)(void *), void (*before_test)(void), void (*after_test)(void)) { 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); for (r = 0; r < repeats; ++r) { if (before_test) before_test(); for (t = 0; t < threads; ++t) { id[t] = t; #ifdef GIT_THREADS cl_git_pass(git_thread_create(&th[t], func, &id[t])); #else cl_assert(func(&id[t]) == &id[t]); #endif } #ifdef GIT_THREADS for (t = 0; t < threads; ++t) cl_git_pass(git_thread_join(&th[t], NULL)); memset(th, 0, threads * sizeof(git_thread)); #endif if (after_test) after_test(); } git__free(id); git__free(th); }