aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNIIBE Yutaka <[email protected]>2017-01-29 23:19:32 +0000
committerNIIBE Yutaka <[email protected]>2017-01-29 23:19:32 +0000
commit216afba0d99582d0fbae1d6e925f4ddb349d9de3 (patch)
tree825526af449f40647f2432ba8267e453b463380d
parentscd: More changes on watching removal of card/reader. (diff)
downloadgnupg-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.c29
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);
}