Core: Don't wait for completion if cancel_transfer failed
authorZoltán Kovács <0x4b5a@gmail.com>
Tue, 29 Jan 2013 00:14:29 +0000 (00:14 +0000)
committerPete Batard <pete@akeo.ie>
Tue, 29 Jan 2013 00:21:58 +0000 (00:21 +0000)
* See http://libusbx.1081486.n5.nabble.com/Libusbx-devel-libusb-interrupt-transfer-does-not-return-in-case-of-error-td626.html
* Closes #76

AUTHORS
libusb/sync.c
libusb/version_nano.h

diff --git a/AUTHORS b/AUTHORS
index cb0511aa184dc1e9d2cc8e16e33636969d78c1b8..88c7ab50521f5eb5bd81d52e41e95c9c1141e277 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -48,4 +48,5 @@ Uri Lublin
 Vasily Khoruzhick
 Vitali Lovich
 Xiaofan Chen
+Zoltán Kovács
 Роман Донченко
index 5033387aedbac310d6f9883371d0a5fcd0ab6fcc..b9a72e4688324077b04fb640cd8a1423a579a6a4 100644 (file)
@@ -106,10 +106,11 @@ int API_EXPORTED libusb_control_transfer(libusb_device_handle *dev_handle,
                if (r < 0) {
                        if (r == LIBUSB_ERROR_INTERRUPTED)
                                continue;
-                       libusb_cancel_transfer(transfer);
-                       while (!completed)
-                               if (libusb_handle_events_completed(HANDLE_CTX(dev_handle), &completed) < 0)
-                                       break;
+                       if (libusb_cancel_transfer(transfer) == LIBUSB_SUCCESS) {
+                               while (!completed)
+                                       if (libusb_handle_events_completed(HANDLE_CTX(dev_handle), &completed) < 0)
+                                               break;
+                       }
                        libusb_free_transfer(transfer);
                        return r;
                }
@@ -183,10 +184,11 @@ static int do_sync_bulk_transfer(struct libusb_device_handle *dev_handle,
                if (r < 0) {
                        if (r == LIBUSB_ERROR_INTERRUPTED)
                                continue;
-                       libusb_cancel_transfer(transfer);
-                       while (!completed)
-                               if (libusb_handle_events_completed(HANDLE_CTX(dev_handle), &completed) < 0)
-                                       break;
+                       if (libusb_cancel_transfer(transfer) == LIBUSB_SUCCESS) {
+                               while (!completed)
+                                       if (libusb_handle_events_completed(HANDLE_CTX(dev_handle), &completed) < 0)
+                                               break;
+                       }
                        libusb_free_transfer(transfer);
                        return r;
                }
index 7e52a568ce091ee8c17220f7ddd4aefffb01c20d..7f14aa202d7b2b496f783c844d9cecf74bbb49d0 100644 (file)
@@ -1 +1 @@
-#define LIBUSB_NANO 10598
+#define LIBUSB_NANO 10599