agent: Kludge to mitigate blocking calls in Libgcrypt.
authorWerner Koch <wk@gnupg.org>
Fri, 11 Nov 2016 19:35:36 +0000 (20:35 +0100)
committerWerner Koch <wk@gnupg.org>
Fri, 11 Nov 2016 19:36:58 +0000 (20:36 +0100)
commit4473db1ef24031ff4e26c9a9de95dbe898ed2b97
treea9c219cf8b11b8f92f7a1908e74fb5da1fde9963
parent7b04a43c05834b937b32a596f1941e9728add5fa
agent: Kludge to mitigate blocking calls in Libgcrypt.

* agent/gpg-agent.c (agent_libgcrypt_progress_cb): Sleep for 100ms on
"need_entropy".
--

During key generation Libgrypt will read from /dev/random which may
block.  Libgcrypt is not nPth aware and thus the entire process will
block.  Fortunately there is also a select with a short timeout to run
the progress callback.  We detect this in gpg-agent and introduce a
short delay to give other threads (i.e. connections) an opportunity to
run.

This alone is not sufficient, an updated Libgpg-error is also required
to make the lock functions nPth aware.

Signed-off-by: Werner Koch <wk@gnupg.org>
agent/gpg-agent.c