From 00db5032f326eb5c1c40b8a74764c62b29562ba7 Mon Sep 17 00:00:00 2001
From: Mike F <support@labjack.com>
Date: Mon, 22 Feb 2010 14:22:21 -0700
Subject: [PATCH] Removed the USBI_OS_HANDLES_TIMEOUT assumption and code for darwin machines. This allows both bulk and interrupt transfers to timeout correctly.

---
 configure.ac           |    1 -
 libusb/os/darwin_usb.c |   22 ++++++----------------
 2 files changed, 6 insertions(+), 17 deletions(-)

diff --git a/configure.ac b/configure.ac
index 093a875..9ee16f6 100644
--- a/configure.ac
+++ b/configure.ac
@@ -25,7 +25,6 @@ case $host in
 *-darwin*)
 	AC_DEFINE(OS_DARWIN, [], [Darwin backend])
 	AC_SUBST(OS_DARWIN)
-	AC_DEFINE(USBI_OS_HANDLES_TIMEOUT, [], [Backend handles timeout])
 	AC_MSG_RESULT([Darwin/MacOS X])
 	backend="darwin"
 	AM_LDFLAGS="-Wl,-framework -Wl,IOKit -Wl,-framework -Wl,CoreFoundation -Wl,-prebind -no-undefined"
diff --git a/libusb/os/darwin_usb.c b/libusb/os/darwin_usb.c
index fb5b8d5..dde1366 100644
--- a/libusb/os/darwin_usb.c
+++ b/libusb/os/darwin_usb.c
@@ -1096,24 +1096,14 @@ static int submit_bulk_transfer(struct usbi_transfer *itransfer) {
 						 &transferType, &maxPacketSize, &interval);
   
   /* submit the request */
-  /* timeouts are unavailable on interrupt endpoints */
-  if (transferType == kUSBInterrupt) {
-    if (is_read)
+    if (is_read) {
       ret = (*(cInterface->interface))->ReadPipeAsync(cInterface->interface, pipeRef, transfer->buffer,
-						      transfer->length, darwin_async_io_callback, itransfer);
-    else
+						      transfer->length, darwin_async_io_callback, (void *)itransfer);
+    }
+    else {
       ret = (*(cInterface->interface))->WritePipeAsync(cInterface->interface, pipeRef, transfer->buffer,
-						       transfer->length, darwin_async_io_callback, itransfer);
-  } else {
-    if (is_read)
-      ret = (*(cInterface->interface))->ReadPipeAsyncTO(cInterface->interface, pipeRef, transfer->buffer,
-							transfer->length, transfer->timeout, transfer->timeout,
-							darwin_async_io_callback, (void *)itransfer);
-    else
-      ret = (*(cInterface->interface))->WritePipeAsyncTO(cInterface->interface, pipeRef, transfer->buffer,
-							 transfer->length, transfer->timeout, transfer->timeout,
-							 darwin_async_io_callback, (void *)itransfer);
-  }
+						       transfer->length, darwin_async_io_callback, (void *)itransfer);
+    }
 
   if (ret)
     usbi_err (TRANSFER_CTX (transfer), "bulk transfer failed (dir = %s): %s (code = 0x%08x)", is_read ? "In" : "Out",
-- 
1.5.4.5


