mirror of
git://git.gnupg.org/gnupg.git
synced 2024-12-22 10:19:57 +01:00
keyboxd: Use D-lines instead of a separate thread.
* kbx/kbx-client-util.c (kbx_client_data_new): Add arg 'dlines'. * g10/call-keyboxd.c (open_context): Set DLINES to true. * sm/keydb.c (open_context): Ditto. -- This allows to compile time switch between the D-line and the fd-passing data communication between gpg/gpgsm and keyboxd. A quick test with about 3000 OpenPGP keys showed that D-lines are only 10% slower than the fd-passing based implementation. Given that the thread adds extra complexity we go for now with the D-line approach. Signed-off-by: Werner Koch <wk@gnupg.org>
This commit is contained in:
parent
29977e21d1
commit
6fcc263c18
@ -190,7 +190,7 @@ open_context (ctrl_t ctrl, keyboxd_local_t *r_kbl)
|
||||
return err;
|
||||
}
|
||||
|
||||
err = kbx_client_data_new (&kbl->kcd, kbl->ctx);
|
||||
err = kbx_client_data_new (&kbl->kcd, kbl->ctx, 1);
|
||||
if (err)
|
||||
{
|
||||
assuan_release (kbl->ctx);
|
||||
|
@ -270,10 +270,12 @@ datastream_thread (void *arg)
|
||||
|
||||
|
||||
/* Create a new keyboxd client data object and return it at R_KCD.
|
||||
* CTX is the assuan context to be used for connecting the
|
||||
* keyboxd. */
|
||||
* CTX is the assuan context to be used for connecting the keyboxd.
|
||||
* If dlines is set, communication is done without fd passing via
|
||||
* D-lines. */
|
||||
gpg_error_t
|
||||
kbx_client_data_new (kbx_client_data_t *r_kcd, assuan_context_t ctx)
|
||||
kbx_client_data_new (kbx_client_data_t *r_kcd, assuan_context_t ctx,
|
||||
int dlines)
|
||||
{
|
||||
kbx_client_data_t kcd;
|
||||
int rc;
|
||||
@ -285,6 +287,9 @@ kbx_client_data_new (kbx_client_data_t *r_kcd, assuan_context_t ctx)
|
||||
|
||||
kcd->ctx = ctx;
|
||||
|
||||
if (dlines)
|
||||
goto leave;
|
||||
|
||||
rc = npth_mutex_init (&kcd->mutex, NULL);
|
||||
if (rc)
|
||||
{
|
||||
@ -312,6 +317,7 @@ kbx_client_data_new (kbx_client_data_t *r_kcd, assuan_context_t ctx)
|
||||
return err;
|
||||
}
|
||||
|
||||
leave:
|
||||
*r_kcd = kcd;
|
||||
return 0;
|
||||
}
|
||||
|
@ -26,7 +26,7 @@ struct kbx_client_data_s;
|
||||
typedef struct kbx_client_data_s *kbx_client_data_t;
|
||||
|
||||
gpg_error_t kbx_client_data_new (kbx_client_data_t *r_kcd,
|
||||
assuan_context_t ctx);
|
||||
assuan_context_t ctx, int dlines);
|
||||
void kbx_client_data_release (kbx_client_data_t kcd);
|
||||
gpg_error_t kbx_client_data_cmd (kbx_client_data_t kcd, const char *command,
|
||||
gpg_error_t (*status_cb)(void *opaque,
|
||||
|
@ -570,7 +570,7 @@ open_context (ctrl_t ctrl, keydb_local_t *r_kbl)
|
||||
return err;
|
||||
}
|
||||
|
||||
err = kbx_client_data_new (&kbl->kcd, kbl->ctx);
|
||||
err = kbx_client_data_new (&kbl->kcd, kbl->ctx, 1);
|
||||
if (err)
|
||||
{
|
||||
assuan_release (kbl->ctx);
|
||||
|
Loading…
x
Reference in New Issue
Block a user