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);