diff options
author | NIIBE Yutaka <[email protected]> | 2017-01-29 23:19:32 +0000 |
---|---|---|
committer | NIIBE Yutaka <[email protected]> | 2017-01-29 23:19:32 +0000 |
commit | 216afba0d99582d0fbae1d6e925f4ddb349d9de3 (patch) | |
tree | 825526af449f40647f2432ba8267e453b463380d | |
parent | scd: More changes on watching removal of card/reader. (diff) | |
download | gnupg-216afba0d99582d0fbae1d6e925f4ddb349d9de3.tar.gz gnupg-216afba0d99582d0fbae1d6e925f4ddb349d9de3.zip |
scd: Fix cancel INTERRUPT transfer.
* scd/ccid-driver.c (do_close_reader): Don't lock events, but check the
return value of libusb_cancel_transfer.
Signed-off-by: NIIBE Yutaka <[email protected]>
Diffstat (limited to '')
-rw-r--r-- | scd/ccid-driver.c | 29 |
1 files changed, 10 insertions, 19 deletions
diff --git a/scd/ccid-driver.c b/scd/ccid-driver.c index bbdd69773..305c9d2f4 100644 --- a/scd/ccid-driver.c +++ b/scd/ccid-driver.c @@ -2116,33 +2116,24 @@ do_close_reader (ccid_driver_t handle) { if (handle->transfer) { - /* By locking libusb events, make sure handle->transfer is - canceled properly; Don't cancel completed transfer. */ -#ifdef USE_NPTH - npth_unprotect (); -#endif - libusb_lock_events (NULL); -#ifdef USE_NPTH - npth_protect (); -#endif if (!handle->powered_off) { - libusb_cancel_transfer (handle->transfer); - libusb_unlock_events (NULL); + DEBUGOUT ("libusb_cancel_transfer\n"); - while (!handle->powered_off) - { + rc = libusb_cancel_transfer (handle->transfer); + if (rc != LIBUSB_ERROR_NOT_FOUND) + while (!handle->powered_off) + { + DEBUGOUT ("libusb_handle_events_completed\n"); #ifdef USE_NPTH - npth_unprotect (); + npth_unprotect (); #endif - libusb_handle_events_completed (NULL, &handle->powered_off); + libusb_handle_events_completed (NULL, &handle->powered_off); #ifdef USE_NPTH - npth_protect (); + npth_protect (); #endif - } + } } - else - libusb_unlock_events (NULL); libusb_free_transfer (handle->transfer); } |