From 5e17c8b97645672bcfb338b392818308d240a2b3 Mon Sep 17 00:00:00 2001 From: Ben Kibbey Date: Tue, 1 Mar 2022 21:10:30 -0800 Subject: [PATCH] Fix some warnings found by Valgrind (helgrind tool). --- src/cache.c | 27 +++++++++++++++++---------- src/pwmd.c | 2 +- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/src/cache.c b/src/cache.c index 748b1a71..b3e5f326 100644 --- a/src/cache.c +++ b/src/cache.c @@ -61,7 +61,7 @@ void log_write (const char *fmt, ...); static gpg_error_t clear_once (file_cache_t * p, int agent, int force); static int remove_entry (const char *); -static void free_entry (file_cache_t * p, int agent); +static void free_entry (file_cache_t * p, int agent, int unlock); static file_cache_t * get_entry (const char *filename) @@ -97,7 +97,8 @@ cache_lock_mutex (void *ctx, const char *filename, long lock_timeout, int add, { MUTEX_UNLOCK (&cache_mutex); MUTEX_TRYLOCK (ctx, p->mutex, rc, lock_timeout); - p->flags |= CACHE_FLAG_LOCKED; + if (!rc) + p->flags |= CACHE_FLAG_LOCKED; } else if (add) { @@ -109,7 +110,8 @@ cache_lock_mutex (void *ctx, const char *filename, long lock_timeout, int add, if (p) { MUTEX_TRYLOCK (ctx, p->mutex, rc, lock_timeout); - p->flags |= CACHE_FLAG_LOCKED; + if (!rc) + p->flags |= CACHE_FLAG_LOCKED; } } else @@ -135,12 +137,12 @@ remove_entry (const char *filename) pthread_cleanup_push (release_mutex_cb, &cache_mutex); if (p) { - /* Keep a refcount because another client maybe editing this same new + /* Keep a refcount because another client may be editing this same new * file. The entry needs to be kept in case the other client SAVE's. */ p->refcount--; if (!p->refcount) - free_entry (p, 0); + free_entry (p, 0, 1); } pthread_cleanup_pop (1); @@ -247,10 +249,11 @@ cache_unlock_mutex (const char *filename, int remove) if (p) { - MUTEX_UNLOCK (p->mutex); p->flags &= ~CACHE_FLAG_LOCKED; if (remove) remove_entry (filename); + else + MUTEX_UNLOCK (p->mutex); } pthread_cleanup_pop (1); @@ -560,7 +563,7 @@ cache_adjust_timeout () if (!rc && !p->defer_clear) { - free_entry (p, 0); + free_entry (p, 0, 0); t = slist_length (key_cache); send_status_all (STATUS_CACHE, NULL); } @@ -780,7 +783,7 @@ clear_once (file_cache_t *p, int agent, int force) } static void -free_entry (file_cache_t *p, int agent) +free_entry (file_cache_t *p, int agent, int unlock) { gpg_error_t rc; @@ -791,8 +794,13 @@ free_entry (file_cache_t *p, int agent) if (rc) log_write ("%s(): %s", __FUNCTION__, pwmd_strerror (rc)); + key_cache = slist_remove (key_cache, p); + if (p->mutex) { + if (unlock) + MUTEX_UNLOCK (p->mutex); + pthread_mutex_destroy (p->mutex); xfree (p->mutex); } @@ -800,7 +808,6 @@ free_entry (file_cache_t *p, int agent) strv_free (p->grip); xfree (p->siggrip); xfree (p->filename); - key_cache = slist_remove (key_cache, p); xfree (p); } @@ -925,7 +932,7 @@ cache_deinit () { file_cache_t *p = slist_nth_data (key_cache, i); - free_entry (p, 1); + free_entry (p, 1, 0); t = slist_length (key_cache); i = -1; } diff --git a/src/pwmd.c b/src/pwmd.c index c0f4cb77..c9b4eeed 100644 --- a/src/pwmd.c +++ b/src/pwmd.c @@ -205,8 +205,8 @@ reload_rcfile_thread (void *arg) char *prio2 = NULL; #endif - pthread_cleanup_push (release_mutex_cb, &rcfile_mutex); pthread_cond_wait (&rcfile_cond, &rcfile_mutex); + pthread_cleanup_push (release_mutex_cb, &rcfile_mutex); TEST_CANCEL (); keep = config_keep_save (); log_write (_("reloading configuration file '%s'"), rcfile); -- 2.11.4.GIT