From 76a2f180286e6cb10fd7075994512a0028d4eb2c Mon Sep 17 00:00:00 2001 From: NIIBE Yutaka Date: Wed, 30 Aug 2023 14:48:56 +0900 Subject: agent: Better interaction between main loop and cache expiration. * agent/agent.h (agent_cache_housekeeping): Remove. (agent_cache_expiration): New. * agent/cache.c (agent_cache_housekeeping): Remove. (agent_cache_expiration): New. * agent/gpg-agent.c (TIMERTICK_INTERVAL): Remove. (handle_tick): Remove. (handle_connections): Call agent_cache_expiration and use the timeout value determined by the call. -- GnuPG-bug-id: 6681 Signed-off-by: NIIBE Yutaka --- agent/cache.c | 45 ++++++++++++++++++++++++++++++++++----------- 1 file changed, 34 insertions(+), 11 deletions(-) (limited to 'agent/cache.c') diff --git a/agent/cache.c b/agent/cache.c index 7616dafc1..f900be6cc 100644 --- a/agent/cache.c +++ b/agent/cache.c @@ -270,23 +270,46 @@ housekeeping (void) } -void -agent_cache_housekeeping (void) +#define TIMERTICK_INTERVAL (4) +struct timespec * +agent_cache_expiration (void) { + static struct timespec abstime; + static struct timespec timeout; + static int initialized = 0; + struct timespec curtime; int res; - if (DBG_CACHE) - log_debug ("agent_cache_housekeeping\n"); + if (!initialized) + { + initialized = 1; + npth_clock_gettime (&abstime); + abstime.tv_sec += TIMERTICK_INTERVAL; + } - res = npth_mutex_lock (&cache_lock); - if (res) - log_fatal ("failed to acquire cache mutex: %s\n", strerror (res)); + npth_clock_gettime (&curtime); + if (!(npth_timercmp (&curtime, &abstime, <))) + { + /* Timeout. */ + npth_clock_gettime (&abstime); + abstime.tv_sec += TIMERTICK_INTERVAL; - housekeeping (); + if (DBG_CACHE) + log_debug ("agent_cache_housekeeping\n"); - res = npth_mutex_unlock (&cache_lock); - if (res) - log_fatal ("failed to release cache mutex: %s\n", strerror (res)); + res = npth_mutex_lock (&cache_lock); + if (res) + log_fatal ("failed to acquire cache mutex: %s\n", strerror (res)); + + housekeeping (); + + res = npth_mutex_unlock (&cache_lock); + if (res) + log_fatal ("failed to release cache mutex: %s\n", strerror (res)); + } + + npth_timersub (&abstime, &curtime, &timeout); + return &timeout; } -- cgit v1.2.3