diff options
Diffstat (limited to 'src/invalid/invalid_thread.c')
| -rw-r--r-- | src/invalid/invalid_thread.c | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/src/invalid/invalid_thread.c b/src/invalid/invalid_thread.c index 1539714..66aca66 100644 --- a/src/invalid/invalid_thread.c +++ b/src/invalid/invalid_thread.c @@ -30,8 +30,12 @@ void *invalid_thread(void *arg) { ndivides++; } } + debug("ndivides = %lu\n", ndivides); - if (ndivides > 0) { + if (ndivides > 0 && + exhaustive_gen_retry(invalid, thread->cfg, thread->gens, + invalid_argss, thread->unrolls, + OFFSET_GENERATORS, OFFSET_POINTS, 1)) { pthread_mutex_lock(thread->mutex_state); size_t nfree = 0; // can be up to ndivides, but also lower... @@ -52,8 +56,8 @@ void *invalid_thread(void *arg) { arg_t prime_divisors = {primes, nprimes}; invalid_argss[OFFSET_POINTS] = &prime_divisors; exhaustive_gen(invalid, thread->cfg, thread->gens, - invalid_argss, thread->unrolls, - OFFSET_GENERATORS, OFFSET_END); + invalid_argss, thread->unrolls, OFFSET_POINTS, + OFFSET_END); pthread_mutex_lock(thread->mutex_state); size_t count = 0; @@ -76,14 +80,13 @@ void *invalid_thread(void *arg) { invalid = curve_new(); invalid->field = gcopy(thread->original_curve->field); invalid->a = gcopy(thread->original_curve->a); - } else { - curve_unroll(invalid, thread->cfg, avma, btop); - avma = btop; + continue; } - } else { - curve_unroll(invalid, thread->cfg, avma, btop); - avma = btop; } + + // We were unsuccessful for some reasol, unroll + curve_unroll(invalid, thread->cfg, avma, btop); + avma = btop; } curve_free(&invalid); |
