aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2011-12-12 20:02:54 +0000
committerWerner Koch <[email protected]>2011-12-12 20:02:54 +0000
commit11164662788036c4b15d30555ea33ec0b6f5a670 (patch)
treec1b1270eb8bb0c09ffad080949a9fe10d550431c
parentFix detection of card removal and insertion. (diff)
downloadgnupg-11164662788036c4b15d30555ea33ec0b6f5a670.tar.gz
gnupg-11164662788036c4b15d30555ea33ec0b6f5a670.zip
scd: Retry command SERIALNO for an inactive card.
* scd/command.c (cmd_serialno): Retry once for an inactive card.
-rw-r--r--scd/command.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/scd/command.c b/scd/command.c
index 655032fee..b2a504cf0 100644
--- a/scd/command.c
+++ b/scd/command.c
@@ -518,8 +518,10 @@ cmd_serialno (assuan_context_t ctx, char *line)
char *serial_and_stamp;
char *serial;
time_t stamp;
+ int retries = 0;
/* Clear the remove flag so that the open_card is able to reread it. */
+ retry:
if (!reader_disabled && ctrl->server_local->card_removed)
{
if ( IS_LOCKED (ctrl) )
@@ -528,7 +530,12 @@ cmd_serialno (assuan_context_t ctx, char *line)
}
if ((rc = open_card (ctrl, *line? line:NULL)))
- return rc;
+ {
+ /* In case of an inactive card, retry once. */
+ if (gpg_err_code (rc) == GPG_ERR_CARD_RESET && retries++ < 1)
+ goto retry;
+ return rc;
+ }
rc = app_get_serial_and_stamp (ctrl->app_ctx, &serial, &stamp);
if (rc)