diff options
author | Nick Mathewson <nickm@torproject.org> | 2008-12-18 17:19:04 +0000 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2008-12-18 17:19:04 +0000 |
commit | bf80e2df3fe48f81c69bb68887376b02ab247e5f (patch) | |
tree | d95e835992abf9a2bad5954042ea38e5a6a9df3c /src/common/util.c | |
parent | b91335117f9faf84001acc65859886e4ddc267a5 (diff) | |
download | tor-bf80e2df3fe48f81c69bb68887376b02ab247e5f.tar.gz tor-bf80e2df3fe48f81c69bb68887376b02ab247e5f.zip |
Replace calls to time(NULL) that occur on the order of once per read, one per write, or once per cell with calls to a function that looks at a cached value of time. This is tricksy to benchmark, since it will only help on systems where time() is a syscall and syscalls are relatively slow.
svn:r17690
Diffstat (limited to 'src/common/util.c')
-rw-r--r-- | src/common/util.c | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/src/common/util.c b/src/common/util.c index 2cb95a59a9..b00d26cba4 100644 --- a/src/common/util.c +++ b/src/common/util.c @@ -1285,8 +1285,39 @@ format_time_interval(char *out, size_t out_len, long interval) } /* ===== + * Cached time + * ===== */ + +#ifndef TIME_IS_FAST +/** Cached estimate of the currrent time. Updated around once per second; + * may be a few seconds off if we are really busy. This is a hack to avoid + * calling time(NULL) (which not everybody has optimized) on critical paths. + */ +static time_t cached_approx_time = 0; + +/** Return a cached estimate of the current time from when + * update_approx_time() was last called. This is a hack to avoid calling + * time(NULL) on critical paths: please do not even think of calling it + * anywhere else. */ +time_t +approx_time(void) +{ + return cached_approx_time; +} + +/** Update the cached estimate of the current time. This function SHOULD be + * called once per second, and MUST be called before the first call to + * get_approx_time. */ +void +update_approx_time(time_t now) +{ + cached_approx_time = now; +} +#endif + +/* ===== * Fuzzy time - * XXXX022 Use this consistently or rip it out. + * XXXX022 Use this consistently or rip most of it out. * ===== */ /* In a perfect world, everybody would run ntp, and ntp would be perfect, so |