diff --git a/src/libopensc/reader-pcsc.c b/src/libopensc/reader-pcsc.c index c2337a7d..3359e621 100644 --- a/src/libopensc/reader-pcsc.c +++ b/src/libopensc/reader-pcsc.c @@ -414,6 +414,14 @@ static int pcsc_connect(sc_reader_t *reader) rv = priv->gpriv->SCardConnect(priv->gpriv->pcsc_ctx, reader->name, priv->gpriv->connect_exclusive ? SCARD_SHARE_EXCLUSIVE : SCARD_SHARE_SHARED, SCARD_PROTOCOL_ANY, &card_handle, &active_proto); +#ifdef __APPLE__ + if (rv == (LONG)SCARD_E_SHARING_VIOLATION) { + sleep(1); /* Try again to compete with Tokend probes */ + rv = priv->gpriv->SCardConnect(priv->gpriv->pcsc_ctx, reader->name, + priv->gpriv->connect_exclusive ? SCARD_SHARE_EXCLUSIVE : SCARD_SHARE_SHARED, + SCARD_PROTOCOL_ANY, &card_handle, &active_proto); + } +#endif if (rv != SCARD_S_SUCCESS) { PCSC_TRACE(reader, "SCardConnect failed", rv); return pcsc_to_opensc_error(rv);