aboutsummaryrefslogtreecommitdiff
path: root/src/invalid/invalid_thread.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/invalid/invalid_thread.c')
-rw-r--r--src/invalid/invalid_thread.c15
1 files changed, 6 insertions, 9 deletions
diff --git a/src/invalid/invalid_thread.c b/src/invalid/invalid_thread.c
index c9e8108..cf0f67c 100644
--- a/src/invalid/invalid_thread.c
+++ b/src/invalid/invalid_thread.c
@@ -5,6 +5,8 @@
#include "invalid_thread.h"
#include "gen/curve.h"
+#include "gen/gens.h"
+#include "gen/point.h"
#include "util/random.h"
#include "util/timeout.h"
@@ -27,6 +29,7 @@ void *invalid_thread(void *arg) {
pari_sp btop = avma;
exhaustive_gen(invalid, thread->setup, OFFSET_B, OFFSET_GENERATORS);
size_t ndivides = 0;
+ size_t nfree = 0;
for (size_t i = thread->nprimes; i-- > 0;) {
if (dvdis(invalid->order, thread->primes[i])) {
// whoo we have a new invalid curve
@@ -38,8 +41,6 @@ void *invalid_thread(void *arg) {
exhaustive_gen_retry(invalid, &invalid_setup, OFFSET_GENERATORS,
OFFSET_POINTS, 1)) {
pthread_mutex_lock(thread->mutex_state);
- size_t nfree = 0;
- // can be up to ndivides, but also lower...
pari_ulong primes[ndivides];
size_t nprimes = 0;
for (size_t i = thread->nprimes; i-- > 0;) {
@@ -70,17 +71,13 @@ void *invalid_thread(void *arg) {
*(thread->generated) += count;
pthread_cond_signal(thread->cond_generated);
pthread_mutex_unlock(thread->mutex_state);
-
- invalid = curve_new();
- invalid->field = gcopy(thread->original_curve->field);
- invalid->a = gcopy(thread->original_curve->a);
- continue;
}
}
- // We were unsuccessful for some reason, unroll
+ points_unroll(invalid, avma, btop);
+ gens_unroll(invalid, avma, btop);
curve_unroll(invalid, avma, btop);
- avma = btop;
+ if (nfree == 0) avma = btop;
}
curve_free(&invalid);