[Pcsclite-git-commit] [CCID] 01/01: ccid_usb.c: fix a race condition on multi reader
Ludovic Rousseau
rousseau at moszumanska.debian.org
Fri Apr 22 17:10:59 UTC 2016
This is an automated email from the git hooks/post-receive script.
rousseau pushed a commit to branch master
in repository CCID.
commit 2c8ffab9962484653b6445a6c85a6c690a5948b3
Author: Ludovic Rousseau <ludovic.rousseau at free.fr>
Date: Fri Apr 22 14:59:21 2016 +0200
ccid_usb.c: fix a race condition on multi reader
When using multiple threads we shall use libusb function
libusb_handle_events_completed() instead of libusb_handle_events() as
documented in http://libusb.sourceforge.net/api-1.0/mtasync.html#Using
Problems may occur when using more than one reader. In that case a card
movement notification may be missed and reported only after a 60 seconds
timeout.
Thanks to Maksim Ivanov for the bug report
"CCID handling of multiple devices"
http://lists.alioth.debian.org/pipermail/pcsclite-muscle/Week-of-Mon-20160418/000564.html
---
src/ccid_usb.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/src/ccid_usb.c b/src/ccid_usb.c
index 6a097ea..16e870d 100644
--- a/src/ccid_usb.c
+++ b/src/ccid_usb.c
@@ -1251,14 +1251,14 @@ int InterruptRead(int reader_index, int timeout /* in ms */)
while (!completed)
{
- ret = libusb_handle_events(ctx);
+ ret = libusb_handle_events_completed(ctx, &completed);
if (ret < 0)
{
if (ret == LIBUSB_ERROR_INTERRUPTED)
continue;
libusb_cancel_transfer(transfer);
while (!completed)
- if (libusb_handle_events(ctx) < 0)
+ if (libusb_handle_events_completed(ctx, &completed) < 0)
break;
libusb_free_transfer(transfer);
DEBUG_CRITICAL2("libusb_handle_events failed: %s",
@@ -1378,7 +1378,7 @@ static void *Multi_PollingProc(void *p_ext)
completed = 0;
while (!completed && !msExt->terminated)
{
- rv = libusb_handle_events(ctx);
+ rv = libusb_handle_events_completed(ctx, &completed);
if (rv < 0)
{
DEBUG_COMM2("libusb_handle_events err %d", rv);
@@ -1390,7 +1390,7 @@ static void *Multi_PollingProc(void *p_ext)
while (!completed && !msExt->terminated)
{
- if (libusb_handle_events(ctx) < 0)
+ if (libusb_handle_events_completed(ctx, &completed) < 0)
break;
}
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pcsclite/CCID.git
More information about the Pcsclite-cvs-commit
mailing list