diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/invalid/invalid.c | 9 | ||||
| -rw-r--r-- | src/invalid/invalid_thread.c | 5 | ||||
| -rw-r--r-- | src/invalid/invalid_thread.h | 1 |
3 files changed, 8 insertions, 7 deletions
diff --git a/src/invalid/invalid.c b/src/invalid/invalid.c index ed2ee77..765a566 100644 --- a/src/invalid/invalid.c +++ b/src/invalid/invalid.c @@ -210,6 +210,10 @@ static size_t invalid_curves_threaded(curve_t *curve, config_t *cfg, pthread_cond_t generated_cond = PTHREAD_COND_INITIALIZER; for (size_t i = 0; i < cfg->threads; ++i) { + pari_thread_alloc(&pari_threads[i], cfg->thread_memory, + (GEN)&threads[i]); + + threads[i].pari_thread = &pari_threads[i]; threads[i].original_curve = curve; threads[i].nprimes = nprimes; threads[i].primes = primes; @@ -221,15 +225,12 @@ static size_t invalid_curves_threaded(curve_t *curve, config_t *cfg, threads[i].cfg = cfg; threads[i].gens = invalid_gen; threads[i].unrolls = unrolls; - - pari_thread_alloc(&pari_threads[i], cfg->thread_memory, - (GEN)&threads[i]); } pthread_mutex_lock(&state_mutex); for (size_t i = 0; i < cfg->threads; ++i) { pthread_create(&pthreads[i], NULL, &invalid_thread, - (void *)&pari_threads[i]); + (void *)&threads[i]); } bool running = true; diff --git a/src/invalid/invalid_thread.c b/src/invalid/invalid_thread.c index a06bafa..1539714 100644 --- a/src/invalid/invalid_thread.c +++ b/src/invalid/invalid_thread.c @@ -10,9 +10,8 @@ #include "math/random.h" void *invalid_thread(void *arg) { - struct pari_thread *pthread = (struct pari_thread *)arg; - // TODO: This is dodgy ... as its really a GEN (so a long*) - thread_t *thread = (thread_t *)pari_thread_start(pthread); + thread_t *thread = (thread_t *)arg; + pari_thread_start(thread->pari_thread); random_init(); arg_t *invalid_argss[OFFSET_END]; diff --git a/src/invalid/invalid_thread.h b/src/invalid/invalid_thread.h index 4486961..869018a 100644 --- a/src/invalid/invalid_thread.h +++ b/src/invalid/invalid_thread.h @@ -15,6 +15,7 @@ typedef enum { STATE_FREE, STATE_GENERATING, STATE_GENERATED } state_e; typedef struct { + struct pari_thread* pari_thread; curve_t *original_curve; size_t nprimes; pari_ulong *primes; |
