From 2abc36854cba18ef27b65f4c79d75003440eb2f9 Mon Sep 17 00:00:00 2001 From: Ben Kibbey Date: Mon, 8 Jul 2013 20:42:50 -0400 Subject: [PATCH] Fix non-PKI regression in commit f2a45de. The cache entry would get cleared for new non-PKI data files during SAVE. --- src/cache.c | 14 ++++++++++---- src/crypto.c | 4 +++- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/cache.c b/src/cache.c index c4cf8407..cc48feca 100644 --- a/src/cache.c +++ b/src/cache.c @@ -504,14 +504,20 @@ cache_iscached (const char *filename, int *defer) pthread_cleanup_pop (1); /* Test if the data file disappeared from the filesystem. */ - if (!rc && access (filename, R_OK) == -1) + if ((!rc || gpg_err_code (rc) == GPG_ERR_NO_DATA) + && access (filename, R_OK) == -1) { rc = gpg_error_from_errno (errno); if (gpg_err_code (rc) == GPG_ERR_ENOENT) { - rc = cache_defer_clear (md5file); - if (!rc && defer) - *defer = 1; + /* When -1, don't clear the cache entry. Fixes clearing the + * cache entry when saving a new file. */ + if ((defer && *defer != -1) || !defer) + { + rc = cache_defer_clear (md5file); + if (!rc && defer) + *defer = 1; + } rc = GPG_ERR_ENOENT; } diff --git a/src/crypto.c b/src/crypto.c index 6df05da1..249a0d2c 100644 --- a/src/crypto.c +++ b/src/crypto.c @@ -891,8 +891,10 @@ export_common (assuan_context_t ctx, int inquire, struct crypto_s * crypto, { if (use_cache) { + int defer = -1; + cache_lock (); - rc = cache_iscached (outfile, NULL); + rc = cache_iscached (outfile, &defer); if (!rc) cached = 1; else if (gpg_err_code (rc) == GPG_ERR_ENOENT -- 2.11.4.GIT