diff options
author | Vsevolod Stakhov <vsevolod@rambler-co.ru> | 2009-03-25 13:10:48 +0300 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@rambler-co.ru> | 2009-03-25 13:10:48 +0300 |
commit | b539b432494cafe78c47a0fc13a289006c4a1b24 (patch) | |
tree | ef90a21ec435241f11e6354208853e915a03d5c8 /src/util.c | |
parent | 62aaf7da57503a257aecede98ba2ae2e1f2ee3e2 (diff) | |
download | rspamd-b539b432494cafe78c47a0fc13a289006c4a1b24.tar.gz rspamd-b539b432494cafe78c47a0fc13a289006c4a1b24.zip |
* More accurate work with clock
Diffstat (limited to 'src/util.c')
-rw-r--r-- | src/util.c | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/src/util.c b/src/util.c index ef9531bd3..64f8910e6 100644 --- a/src/util.c +++ b/src/util.c @@ -787,18 +787,28 @@ resolve_stat_filename (memory_pool_t *pool, char *pattern, char *rcpt, char *fro return new; } -long int -calculate_check_time (struct timespec *begin) +const char * +calculate_check_time (struct timespec *begin, int resolution) { struct timespec ts; - long int res; + double diff; + static char res[sizeof("100000.000")]; + static char fmt[sizeof("%.10f")]; +#ifdef HAVE_CLOCK_PROCESS_CPUTIME_ID + clock_gettime (CLOCK_PROCESS_CPUTIME_ID, &ts); +#elif defined(HAVE_CLOCK_VIRTUAL) + clock_gettime (CLOCK_VIRTUAL, &ts); +#else clock_gettime (CLOCK_REALTIME, &ts); +#endif - res = (ts.tv_sec - begin->tv_sec) * 1000 + /* Seconds */ - (ts.tv_nsec - begin->tv_nsec) / 1000000; /* Nanoseconds */ + diff = (ts.tv_sec - begin->tv_sec) * 1000. + /* Seconds */ + (ts.tv_nsec - begin->tv_nsec) / 1000000.; /* Nanoseconds */ + sprintf (fmt, "%%.%df", resolution); + snprintf (res, sizeof (res), fmt, diff); - return res; + return (const char *)res; } /* |