aboutsummaryrefslogtreecommitdiffstats
path: root/g10/keydb.c
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2019-08-23 13:51:13 +0000
committerWerner Koch <[email protected]>2019-08-23 13:51:43 +0000
commite64f0dfd72de548837f630bccd249a87451b89c5 (patch)
tree55c282ab9ea9ad9b210a3c38981986ec37bb749c /g10/keydb.c
parentkbx: Include deleted records into the --stats output. (diff)
downloadgnupg-e64f0dfd72de548837f630bccd249a87451b89c5.tar.gz
gnupg-e64f0dfd72de548837f630bccd249a87451b89c5.zip
gpg,sm: Implement keybox compression run and release lock in gpgsm
* g10/keydb.c (keydb_add_resource): Call keybox_compress. * sm/keydb.c (keydb_add_resource): Release the lock after a compress. -- Note that in gpgsm we already did the compress run but we didn't released the lock on the file. This might have been a reason for some strange hangs. GnuPG-bug-id: 4644 Signed-off-by: Werner Koch <[email protected]>
Diffstat (limited to 'g10/keydb.c')
-rw-r--r--g10/keydb.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/g10/keydb.c b/g10/keydb.c
index a7691bbe2..92e5faae8 100644
--- a/g10/keydb.c
+++ b/g10/keydb.c
@@ -805,14 +805,27 @@ keydb_add_resource (const char *url, unsigned int flags)
err = gpg_error (GPG_ERR_RESOURCE_LIMIT);
else
{
+ KEYBOX_HANDLE kbxhd;
+
if ((flags & KEYDB_RESOURCE_FLAG_PRIMARY))
primary_keydb = token;
all_resources[used_resources].type = rt;
all_resources[used_resources].u.kb = NULL; /* Not used here */
all_resources[used_resources].token = token;
- /* FIXME: Do a compress run if needed and no other
- user is currently using the keybox. */
+ /* Do a compress run if needed and no other user is
+ * currently using the keybox. */
+ kbxhd = keybox_new_openpgp (token, 0);
+ if (kbxhd)
+ {
+ if (!keybox_lock (kbxhd, 1, 0))
+ {
+ keybox_compress (kbxhd);
+ keybox_lock (kbxhd, 0, 0);
+ }
+
+ keybox_release (kbxhd);
+ }
used_resources++;
}