Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-6963006

smartcardio is not mt safe - javax.smartcardio.CardException: wait mismatch

XMLWordPrintable

        When trying to check from a thread whether a smartcard has been already
        removed while a read/write operation is taking place in another thread
        the following exception occurs:

           javax.smartcardio.CardException: wait mismatch
              at sun.security.smartcardio.TerminalImpl.waitForCard(TerminalImpl.java:103)
              at sun.security.smartcardio.TerminalImpl.waitForCardAbsent(TerminalImpl.java:120)
              at TerminalImplExample.run(TerminalImplExample.java:116)

        This is an exception which should never happen, please see the source code
        of waitForCard() in
        /ws/j2se/src/share/classes/sun/security/smartcardio/TerminalImpl.java

                    // should never happen
                    if (wantPresent != present) {
                        throw new CardException("wait mismatch");

        Since it does happen, I'd consider this a bug. A test case is available.
        See the attached zip file TerminalImplExample.zip. It requires a card reader.

        The reason why the exception occured is that waitForCard() is not prepared to
        handle other card state changes than SCARD_STATE_PRESENT = 0x0020;
        With the test case we can see that for example 0x0122 occurs, which means
        CHANGED PRESENT INUSE.

              miroslawzn Miroslaw Niemiec (Inactive)
              tviessma Thomas Viessmann (Inactive)
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

                Created:
                Updated:
                Resolved:
                Imported:
                Indexed: