From e80925171ddb20c7e76c1db88c15ce2d9b09db86 Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Tue, 13 Jun 2017 09:05:40 +0200 Subject: [PATCH] gpg: Disable keydb handle caching only for W32 * g10/getkey.c (getkey_end) [!W32]: Re-enable caching. -- This change limits of the effects of commit d3d640b9cc98dd0d06b49a2e4d46eb67af96fe29 to W32 system. GnuPG-bug-id: 3097 Signed-off-by: Werner Koch --- g10/getkey.c | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/g10/getkey.c b/g10/getkey.c index ac6b9a307..a3df8578a 100644 --- a/g10/getkey.c +++ b/g10/getkey.c @@ -2219,20 +2219,27 @@ getkey_end (ctrl_t ctrl, getkey_ctx_t ctx) { if (ctx) { -/* -XXX: This creates a big regression for Windows because the keyring -* is only released after the global ctrl is released. So if an operation -* does a getkey and then tries to modify the keyring it will fail on -* Windows with a sharing violation. We need to modify all -* keyring write operations to also take the ctrl and close the -* cached_getkey_kdb handle to make writing work. See: -* https://dev.gnupg.org/T3097 +#ifdef HAVE_W32_SYSTEM + + /* FIXME: This creates a big regression for Windows because the + * keyring is only released after the global ctrl is released. + * So if an operation does a getkey and then tries to modify the + * keyring it will fail on Windows with a sharing violation. We + * need to modify all keyring write operations to also take the + * ctrl and close the cached_getkey_kdb handle to make writing + * work. See: GnuPG-bug-id: 3097 */ + (void)ctrl; + keydb_release (ctx->kr_handle); + +#else /*!HAVE_W32_SYSTEM*/ if (ctrl && !ctrl->cached_getkey_kdb) ctrl->cached_getkey_kdb = ctx->kr_handle; else -*/ - keydb_release (ctx->kr_handle); + keydb_release (ctx->kr_handle); + +#endif /*!HAVE_W32_SYSTEM*/ + free_strlist (ctx->extra_list); if (!ctx->not_allocated) xfree (ctx);