mirror of
git://git.gnupg.org/gnupg.git
synced 2025-07-02 22:46:30 +02:00
kbx: Fix datastream_thread and use the data pipe.
* g10/call-keyboxd.c (gpg_keyboxd_deinit_session_data): Release the assuan connection before kbx_client_data_release. (open_context): Enable use of the data pipe. * sm/keydb.c (gpgsm_keydb_deinit_session_data): Release the assuan connection before kbx_client_data_release. (open_context): Enable use of the data pipe. * kbx/kbx-client-util.c (struct kbx_client_data_s): Add THD field. (prepare_data_pipe): Close the pipe output end as it's been sent already. Remember the KCD->THD, so that it can be joined later. (datastream_thread): Finish when reading no data from the pipe. (kbx_client_data_release): Join the thread. Then, we can safely call es_fclose on the FP. -- GnuPG-bug-id: 6512 Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
This commit is contained in:
parent
9433dfa5dd
commit
f5656ff363
3 changed files with 32 additions and 26 deletions
13
sm/keydb.c
13
sm/keydb.c
|
@ -161,10 +161,17 @@ gpgsm_keydb_deinit_session_data (ctrl_t ctrl)
|
|||
log_error ("oops: trying to cleanup an active keydb context\n");
|
||||
else
|
||||
{
|
||||
kbx_client_data_release (kbl->kcd);
|
||||
kbl->kcd = NULL;
|
||||
assuan_release (kbl->ctx);
|
||||
kbl->ctx = NULL;
|
||||
/*
|
||||
* Since there may be pipe output FD sent to the server (so
|
||||
* that it can receive data through the pipe), we should
|
||||
* release the assuan connection before releasing KBL->KCD.
|
||||
* This way, the data receiving thread can finish cleanly,
|
||||
* and we can join the thread.
|
||||
*/
|
||||
kbx_client_data_release (kbl->kcd);
|
||||
kbl->kcd = NULL;
|
||||
}
|
||||
xfree (kbl);
|
||||
}
|
||||
|
@ -580,7 +587,7 @@ open_context (ctrl_t ctrl, keydb_local_t *r_kbl)
|
|||
return err;
|
||||
}
|
||||
|
||||
err = kbx_client_data_new (&kbl->kcd, kbl->ctx, 1);
|
||||
err = kbx_client_data_new (&kbl->kcd, kbl->ctx, 0);
|
||||
if (err)
|
||||
{
|
||||
assuan_release (kbl->ctx);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue