summaryrefslogtreecommitdiff
path: root/src/benchmark.h
diff options
context:
space:
mode:
authorRolf Eike Beer <eike@sf-mail.de>2018-06-26 09:39:19 +0200
committerNikos Mavrogiannopoulos <nmav@redhat.com>2018-06-26 12:37:28 +0200
commite79361f9040a0a59e30aa672240ce2cf42c5ccf5 (patch)
tree7c6eb275dab54c306f162e4a25fa4e7bb62c0ad7 /src/benchmark.h
parent69225bade584a91d429fbce0db136dc004631f20 (diff)
downloadgnutls-e79361f9040a0a59e30aa672240ce2cf42c5ccf5.tar.gz
avoid rounding errors and overflows when substracting timespecs
The current Unix time will cause overflows if multiplied with 1000, which could lead to rounding errors afterwards. Do the substractions first so all numbers stay small enough to fit into unsigned ints. Signed-off-by: Rolf Eike Beer <eike@sf-mail.de>
Diffstat (limited to 'src/benchmark.h')
-rw-r--r--src/benchmark.h3
1 files changed, 1 insertions, 2 deletions
diff --git a/src/benchmark.h b/src/benchmark.h
index e13d9a3850..a59e088e29 100644
--- a/src/benchmark.h
+++ b/src/benchmark.h
@@ -62,6 +62,5 @@ double stop_benchmark(struct benchmark_st *st, const char *metric,
inline static unsigned int
timespec_sub_ms(struct timespec *a, struct timespec *b)
{
- return (a->tv_sec * 1000 + a->tv_nsec / (1000 * 1000) -
- (b->tv_sec * 1000 + b->tv_nsec / (1000 * 1000)));
+ return (a->tv_sec - b->tv_sec) * 1000 + (a->tv_nsec - b->tv_nsec) / (1000 * 1000);
}