aboutsummaryrefslogtreecommitdiffstats
path: root/g10/getkey.c
diff options
context:
space:
mode:
Diffstat (limited to 'g10/getkey.c')
-rw-r--r--g10/getkey.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/g10/getkey.c b/g10/getkey.c
index 04ecf4fc8..ac6b9a307 100644
--- a/g10/getkey.c
+++ b/g10/getkey.c
@@ -2219,10 +2219,20 @@ 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
+
if (ctrl && !ctrl->cached_getkey_kdb)
ctrl->cached_getkey_kdb = ctx->kr_handle;
else
- keydb_release (ctx->kr_handle);
+*/
+ keydb_release (ctx->kr_handle);
free_strlist (ctx->extra_list);
if (!ctx->not_allocated)
xfree (ctx);