r = usbi_backend->open(_handle);
if (r < 0) {
- usbi_dbg("could not open device: %s", libusb_error_name(r));
+ usbi_dbg("open %d.%d returns %d", dev->bus_number, dev->device_address, r);
libusb_unref_device(dev);
usbi_mutex_destroy(&_handle->lock);
free(_handle);
/* safe iteration because transfers may be being deleted */
list_for_each_entry_safe(itransfer, tmp, &ctx->flying_transfers, list, struct usbi_transfer) {
struct libusb_transfer *transfer =
- USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
+ USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
if (transfer->dev_handle != dev_handle)
continue;
if (context) {
*context = ctx;
+ } else if (!usbi_default_context) {
+ usbi_dbg("created default context");
+ usbi_default_context = ctx;
+ default_context_refcnt++;
}
usbi_mutex_static_unlock(&default_context_lock);
}
/** \ingroup misc
- * Returns a constant NULL-terminated string with the ASCII name of a libusb
+ * Returns a constant NULL-terminated string with the ASCII name of a libusbx
* error or transfer status code. The caller must not free() the returned
* string.
*
darwin_clear_iterator (libusb_rem_device_iterator);
darwin_clear_iterator (libusb_add_device_iterator);
- usbi_dbg ("thread ready to receive events");
+ usbi_dbg ("darwin event thread ready to receive events");
/* signal the main thread that the hotplug runloop has been created. */
pthread_mutex_lock (&libusb_darwin_at_mutex);
/* run the runloop */
CFRunLoopRun();
- usbi_dbg ("thread exiting");
+ usbi_dbg ("darwin event thread exiting");
/* remove the notification cfsource */
CFRunLoopRemoveSource(runloop, libusb_notification_cfsource, kCFRunLoopDefaultMode);
urb->type = urb_type;
urb->endpoint = transfer->endpoint;
urb->buffer = transfer->buffer + (i * bulk_buffer_len);
- if (use_bulk_continuation && !is_out && (i != num_urbs - 1))
+ /* don't set the short not ok flag for the last URB */
+ if (use_bulk_continuation && !is_out && (i < num_urbs - 1))
urb->flags = USBFS_URB_SHORT_NOT_OK;
if (i == num_urbs - 1 && last_urb_partial)
urb->buffer_length = transfer->length % bulk_buffer_len;