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>
|
2004-08-18 Werner Koch <wk@g10code.de>
|
||||||
|
|
||||||
* protect-tool.c (get_passphrase): Make sure that the default
|
* protect-tool.c (get_passphrase): Make sure that the default
|
||||||
|
@ -41,6 +41,14 @@
|
|||||||
#define MAX_OPEN_FDS 20
|
#define MAX_OPEN_FDS 20
|
||||||
#endif
|
#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;
|
static ASSUAN_CONTEXT entry_ctx = NULL;
|
||||||
#ifdef USE_GNU_PTH
|
#ifdef USE_GNU_PTH
|
||||||
static pth_mutex_t entry_lock = PTH_MUTEX_INIT;
|
static pth_mutex_t entry_lock = PTH_MUTEX_INIT;
|
||||||
@ -104,11 +112,23 @@ start_pinentry (CTRL ctrl)
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
#ifdef USE_GNU_PTH
|
#ifdef USE_GNU_PTH
|
||||||
if (!pth_mutex_acquire (&entry_lock, 0, NULL))
|
{
|
||||||
|
pth_event_t evt;
|
||||||
|
|
||||||
|
evt = pth_event (PTH_EVENT_TIME, pth_timeout (LOCK_TIMEOUT, 0));
|
||||||
|
if (!pth_mutex_acquire (&entry_lock, 0, evt))
|
||||||
{
|
{
|
||||||
log_error ("failed to acquire the entry lock\n");
|
if (pth_event_occurred (evt))
|
||||||
return gpg_error (GPG_ERR_INTERNAL);
|
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
|
#endif
|
||||||
|
|
||||||
if (entry_ctx)
|
if (entry_ctx)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user