diff options
author | NIIBE Yutaka <gniibe@fsij.org> | 2017-11-07 02:49:36 +0100 |
---|---|---|
committer | Werner Koch <wk@gnupg.org> | 2017-11-20 11:53:44 +0100 |
commit | 760aa8aadafb747f33a1461ab0c2570b5ae43716 (patch) | |
tree | d741f7e8f1d9fecf960063d842731c5a21b3fa1b /agent | |
parent | build: Check -Wlogical-op flag availability with -Werror. (diff) | |
download | gnupg2-760aa8aadafb747f33a1461ab0c2570b5ae43716.tar.xz gnupg2-760aa8aadafb747f33a1461ab0c2570b5ae43716.zip |
agent: Use clock or clock_gettime for calibration.
* agent/protect.c (calibrate_get_time): Use clock or clock_gettime.
--
For calibration, clock(3) is better than times(3) among UNIXen.
Tested on NetBSD 7.1 and FreeBSD 11.1, using QEMU.
Thanks to Damien Goutte-Gattat for the information of use of
CLOCKS_PER_SEC; The old code with times(3) is not 100% correct,
in terms of POSIX. It should have used sysconf (_SC_CLK_TCK) instead
of CLOCKS_PER_SEC. CLOCKS_PER_SEC is specifically for clock(3).
GnuPG-bug-id: 3056, 3276, 3472
Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
(cherry picked from commit 380bce13d94ff03c96e39ac1d834f382c5c730a1)
Diffstat (limited to 'agent')
-rw-r--r-- | agent/protect.c | 14 | ||||
-rw-r--r-- | agent/t-protect.c | 2 |
2 files changed, 10 insertions, 6 deletions
diff --git a/agent/protect.c b/agent/protect.c index 3073fc4de..9bb2da6b3 100644 --- a/agent/protect.c +++ b/agent/protect.c @@ -23,6 +23,7 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> +#include <time.h> #include <ctype.h> #include <assert.h> #include <unistd.h> @@ -104,11 +105,14 @@ calibrate_get_time (struct calibrate_time_s *data) &data->creation_time, &data->exit_time, &data->kernel_time, &data->user_time); # endif -#else - struct tms tmp; +#elif defined (CLOCK_THREAD_CPUTIME_ID) + struct timespec tmp; - times (&tmp); - data->ticks = tmp.tms_utime; + clock_gettime (CLOCK_THREAD_CPUTIME_ID, &tmp); + data->ticks = (clock_t)(((unsigned long long)tmp.tv_sec * 1000000000 + + tmp.tv_nsec) * CLOCKS_PER_SEC / 1000000000); +#else + data->ticks = clock (); #endif } @@ -135,7 +139,7 @@ calibrate_elapsed_time (struct calibrate_time_s *starttime) } #else return (unsigned long)((((double) (stoptime.ticks - starttime->ticks)) - /CLOCKS_PER_SEC)*10000000); + /CLOCKS_PER_SEC)*1000); #endif } diff --git a/agent/t-protect.c b/agent/t-protect.c index 1d3c8ec17..92d312c9b 100644 --- a/agent/t-protect.c +++ b/agent/t-protect.c @@ -322,9 +322,9 @@ test_agent_protect_shared_secret (void) int main (int argc, char **argv) { - (void)argc; (void)argv; + opt.verbose = argc - 1; /* We can do "./t-protect -v -v" */ gcry_control (GCRYCTL_DISABLE_SECMEM); test_agent_protect (); |