mirror of
git://git.gnupg.org/gnupg.git
synced 2024-12-22 10:19:57 +01:00
(start_pinentry): Use a timeout for the pinentry lock.
This commit is contained in:
parent
6c3677c296
commit
0ded031237
@ -1,3 +1,7 @@
|
||||
2004-08-20 Werner Koch <wk@g10code.de>
|
||||
|
||||
* query.c (start_pinentry): Use a timeout for the pinentry lock.
|
||||
|
||||
2004-08-18 Werner Koch <wk@g10code.de>
|
||||
|
||||
* protect-tool.c (get_passphrase): Make sure that the default
|
||||
|
@ -41,6 +41,14 @@
|
||||
#define MAX_OPEN_FDS 20
|
||||
#endif
|
||||
|
||||
|
||||
/* Because access to the pinentry must be serialized (it is and shall
|
||||
be a global mutual dialog) we should better timeout further
|
||||
requests after some time. 2 minutes seem to be a reasonable
|
||||
time. */
|
||||
#define LOCK_TIMEOUT (1*60)
|
||||
|
||||
|
||||
static ASSUAN_CONTEXT entry_ctx = NULL;
|
||||
#ifdef USE_GNU_PTH
|
||||
static pth_mutex_t entry_lock = PTH_MUTEX_INIT;
|
||||
@ -104,10 +112,22 @@ start_pinentry (CTRL ctrl)
|
||||
int i;
|
||||
|
||||
#ifdef USE_GNU_PTH
|
||||
if (!pth_mutex_acquire (&entry_lock, 0, NULL))
|
||||
{
|
||||
log_error ("failed to acquire the entry lock\n");
|
||||
return gpg_error (GPG_ERR_INTERNAL);
|
||||
pth_event_t evt;
|
||||
|
||||
evt = pth_event (PTH_EVENT_TIME, pth_timeout (LOCK_TIMEOUT, 0));
|
||||
if (!pth_mutex_acquire (&entry_lock, 0, evt))
|
||||
{
|
||||
if (pth_event_occurred (evt))
|
||||
rc = gpg_error (GPG_ERR_TIMEOUT);
|
||||
else
|
||||
rc = gpg_error (GPG_ERR_INTERNAL);
|
||||
pth_event_free (evt, PTH_FREE_THIS);
|
||||
log_error (_("failed to acquire the pinentry lock: %s\n"),
|
||||
gpg_strerror (rc));
|
||||
return rc;
|
||||
}
|
||||
pth_event_free (evt, PTH_FREE_THIS);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user