From 3d356d165aed7d76a3ea811b1d24ed0a05ac90d4 Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Wed, 18 Jan 2017 10:13:04 +0100 Subject: agent: Reduce sleep time in the progress callback. * agent/gpg-agent.c (agent_libgcrypt_progress_cb): Reduce sleep time from 100ms to 1ms or use gpgrt_yield when build against a recent libgpg-error. -- Debian-bug-id: 851298 Signed-off-by: Werner Koch --- agent/gpg-agent.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'agent/gpg-agent.c') diff --git a/agent/gpg-agent.c b/agent/gpg-agent.c index 724b55a30..b203b07e0 100644 --- a/agent/gpg-agent.c +++ b/agent/gpg-agent.c @@ -1763,11 +1763,19 @@ agent_libgcrypt_progress_cb (void *data, const char *what, int printchar, /* Libgcrypt < 1.8 does not know about nPth and thus when it reads * from /dev/random this will block the process. To mitigate this - * problem we take a short nap when Libgcrypt tells us that it needs + * problem we yield the thread when Libgcrypt tells us that it needs * more entropy. This way other threads have chance to run. */ #if GCRYPT_VERSION_NUMBER < 0x010800 /* 1.8.0 */ if (what && !strcmp (what, "need_entropy")) - npth_usleep (100000); /* 100ms */ + { +#if GPGRT_VERSION_NUMBER < 0x011900 /* 1.25 */ + /* In older gpg-error versions gpgrt_yield is buggy for use with + * nPth and thus we need to resort to a sleep call. */ + npth_usleep (1000); /* 1ms */ +#else + gpgrt_yield (); +#endif + } #endif } -- cgit v1.2.3