diff options
author | Werner Koch <[email protected]> | 2011-12-12 20:02:54 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2011-12-12 20:02:54 +0000 |
commit | 11164662788036c4b15d30555ea33ec0b6f5a670 (patch) | |
tree | c1b1270eb8bb0c09ffad080949a9fe10d550431c | |
parent | Fix detection of card removal and insertion. (diff) | |
download | gnupg-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.c | 9 |
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) |