Lines 918-925
Link Here
|
918 |
if (!strcmp (desc, "X")) |
918 |
if (!strcmp (desc, "X")) |
919 |
desc = NULL; |
919 |
desc = NULL; |
920 |
|
920 |
|
|
|
921 |
retry: |
921 |
pw = cacheid ? agent_get_cache (cacheid, CACHE_MODE_NORMAL, &cache_marker) |
922 |
pw = cacheid ? agent_get_cache (cacheid, CACHE_MODE_NORMAL, &cache_marker) |
922 |
: NULL; |
923 |
: NULL; |
|
|
924 |
if (!pw) |
925 |
{ |
926 |
|
927 |
/* If the pinentry is currently in use, we wait up to 60 seconds |
928 |
for it to close and check the cache again. This solves a common |
929 |
situation where several requests for unprotecting a key have |
930 |
been made but the user is still entering the passphrase for |
931 |
the first request. Because all requests to agent_askpin are |
932 |
serialized they would then pop up one after the other to |
933 |
request the passphrase - despite that the user has already |
934 |
entered it and is then available in the cache. This |
935 |
implementation is not race free but in the worst case the |
936 |
user has to enter the passphrase only once more. */ |
937 |
if (pinentry_active_p (ctrl, 0)) |
938 |
{ |
939 |
/* Active - wait */ |
940 |
if (!pinentry_active_p (ctrl, 60)) |
941 |
{ |
942 |
/* We need to give the other thread a chance to actually put |
943 |
it into the cache. */ |
944 |
pth_sleep (1); |
945 |
goto retry; |
946 |
} |
947 |
/* Timeout - better call pinentry now the plain way. */ |
948 |
} |
949 |
} |
950 |
|
923 |
if (pw) |
951 |
if (pw) |
924 |
{ |
952 |
{ |
925 |
rc = send_back_passphrase (ctx, opt_data, pw); |
953 |
rc = send_back_passphrase (ctx, opt_data, pw); |