From 6c10ca58533d9da85e561b339b027492ce1794d3 Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Mon, 22 Feb 2016 12:50:04 +0100 Subject: [PATCH] Fix use of find_kernel_power_div() --- src/oclHashcat.c | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/src/oclHashcat.c b/src/oclHashcat.c index a9d228fa7..aa171b5bd 100644 --- a/src/oclHashcat.c +++ b/src/oclHashcat.c @@ -4321,7 +4321,7 @@ static void pw_add (hc_device_param_t *device_param, const u8 *pw_buf, const int } } -static uint get_work (hc_device_param_t *device_param, const u64 max) +static uint get_work (hc_device_param_t *device_param, const u64 max, const bool allow_div) { hc_thread_mutex_lock (mux_dispatcher); @@ -4332,23 +4332,26 @@ static uint get_work (hc_device_param_t *device_param, const u64 max) const u64 words_left = words_base - words_cur; - if (data.kernel_power_all > words_left) + if (allow_div) { - if (data.kernel_power_div == 0) + if (data.kernel_power_all > words_left) { - data.kernel_power_div = find_kernel_power_div (words_left, data.kernel_power_all); + if (data.kernel_power_div == 0) + { + data.kernel_power_div = find_kernel_power_div (words_left, data.kernel_power_all); + } } - } - if (data.kernel_power_div) - { - if (device_param->kernel_power == device_param->kernel_power_user) + if (data.kernel_power_div) { - const u32 kernel_power_new = (float) device_param->kernel_power * data.kernel_power_div; - - if (kernel_power_new < device_param->kernel_power) + if (device_param->kernel_power == device_param->kernel_power_user) { - device_param->kernel_power = kernel_power_new; + const u32 kernel_power_new = (float) device_param->kernel_power * data.kernel_power_div; + + if (kernel_power_new < device_param->kernel_power) + { + device_param->kernel_power = kernel_power_new; + } } } } @@ -4515,7 +4518,7 @@ static void *thread_calc (void *p) { while ((data.devices_status != STATUS_EXHAUSTED) && (data.devices_status != STATUS_CRACKED) && (data.devices_status != STATUS_ABORTED) && (data.devices_status != STATUS_QUIT)) { - const uint work = get_work (device_param, -1); + const uint work = get_work (device_param, -1, true); if (work == 0) break; @@ -4625,11 +4628,15 @@ static void *thread_calc (void *p) u64 words_off = 0; u64 words_fin = 0; + bool allow_div = true; + u64 max = -1; while (max) { - const uint work = get_work (device_param, max); + const uint work = get_work (device_param, max, allow_div); + + allow_div = false; if (work == 0) break;