aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/invalid/invalid.c9
-rw-r--r--src/invalid/invalid_thread.c5
-rw-r--r--src/invalid/invalid_thread.h1
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;