Mercurial > hg > release > icedtea7-forest-2.1 > jdk
changeset 4641:529910e1e1d2
6963006: Javacard exception when trying to access card during read operation
Reviewed-by: valeriep
author | miroslawzn |
---|---|
date | Thu, 15 Sep 2011 13:26:33 -0700 |
parents | ebef72df4b3e |
children | fb110f661e8c |
files | src/share/classes/sun/security/smartcardio/TerminalImpl.java |
diffstat | 1 files changed, 11 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/classes/sun/security/smartcardio/TerminalImpl.java Thu Sep 15 16:46:30 2011 +0100 +++ b/src/share/classes/sun/security/smartcardio/TerminalImpl.java Thu Sep 15 13:26:33 2011 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -112,14 +112,17 @@ if (wantPresent == present) { return true; } - // no match, wait - status = SCardGetStatusChange(contextId, timeout, status, readers); - present = (status[0] & SCARD_STATE_PRESENT) != 0; - // should never happen - if (wantPresent != present) { - throw new CardException("wait mismatch"); + // no match, wait (until timeout expires) + long end = System.currentTimeMillis() + timeout; + while (wantPresent != present && timeout != 0) { + // set remaining timeout + if (timeout != TIMEOUT_INFINITE) { + timeout = Math.max(end - System.currentTimeMillis(), 0l); + } + status = SCardGetStatusChange(contextId, timeout, status, readers); + present = (status[0] & SCARD_STATE_PRESENT) != 0; } - return true; + return wantPresent == present; } catch (PCSCException e) { if (e.code == SCARD_E_TIMEOUT) { return false;