98 lines
3.2 KiB
Diff
98 lines
3.2 KiB
Diff
diff -rU4 android-tools-33.0.3--orig/vendor/adb/client/usb_linux.cpp android-tools-33.0.3--patched/vendor/adb/client/usb_linux.cpp
|
|
--- android-tools-33.0.3--orig/vendor/adb/client/usb_linux.cpp 2022-09-23 10:53:08.000000000 +0200
|
|
+++ android-tools-33.0.3--patched/vendor/adb/client/usb_linux.cpp 2022-11-01 10:37:48.631251871 +0100
|
|
@@ -71,10 +71,10 @@
|
|
size_t max_packet_size;
|
|
unsigned zero_mask;
|
|
unsigned writeable = 1;
|
|
|
|
- usbdevfs_urb urb_in;
|
|
- usbdevfs_urb urb_out;
|
|
+ usbdevfs_urb *urb_in;
|
|
+ usbdevfs_urb *urb_out;
|
|
|
|
bool urb_in_busy = false;
|
|
bool urb_out_busy = false;
|
|
bool dead = false;
|
|
@@ -303,9 +303,9 @@
|
|
static int usb_bulk_write(usb_handle* h, const void* data, int len) {
|
|
std::unique_lock<std::mutex> lock(h->mutex);
|
|
D("++ usb_bulk_write ++");
|
|
|
|
- usbdevfs_urb* urb = &h->urb_out;
|
|
+ usbdevfs_urb* urb = h->urb_out;
|
|
memset(urb, 0, sizeof(*urb));
|
|
urb->type = USBDEVFS_URB_TYPE_BULK;
|
|
urb->endpoint = h->ep_out;
|
|
urb->status = -1;
|
|
@@ -342,9 +342,9 @@
|
|
static int usb_bulk_read(usb_handle* h, void* data, int len) {
|
|
std::unique_lock<std::mutex> lock(h->mutex);
|
|
D("++ usb_bulk_read ++");
|
|
|
|
- usbdevfs_urb* urb = &h->urb_in;
|
|
+ usbdevfs_urb* urb = h->urb_in;
|
|
memset(urb, 0, sizeof(*urb));
|
|
urb->type = USBDEVFS_URB_TYPE_BULK;
|
|
urb->endpoint = h->ep_in;
|
|
urb->status = -1;
|
|
@@ -387,18 +387,18 @@
|
|
return -1;
|
|
}
|
|
D("[ urb @%p status = %d, actual = %d ]", out, out->status, out->actual_length);
|
|
|
|
- if (out == &h->urb_in) {
|
|
+ if (out == h->urb_in) {
|
|
D("[ reap urb - IN complete ]");
|
|
h->urb_in_busy = false;
|
|
if (urb->status != 0) {
|
|
errno = -urb->status;
|
|
return -1;
|
|
}
|
|
return urb->actual_length;
|
|
}
|
|
- if (out == &h->urb_out) {
|
|
+ if (out == h->urb_out) {
|
|
D("[ reap urb - OUT compelete ]");
|
|
h->urb_out_busy = false;
|
|
h->cv.notify_all();
|
|
}
|
|
@@ -500,12 +500,12 @@
|
|
** these will quietly fail if the txns are not active,
|
|
** but this ensures that a reader blocked on REAPURB
|
|
** will get unblocked
|
|
*/
|
|
- ioctl(h->fd, USBDEVFS_DISCARDURB, &h->urb_in);
|
|
- ioctl(h->fd, USBDEVFS_DISCARDURB, &h->urb_out);
|
|
- h->urb_in.status = -ENODEV;
|
|
- h->urb_out.status = -ENODEV;
|
|
+ ioctl(h->fd, USBDEVFS_DISCARDURB, h->urb_in);
|
|
+ ioctl(h->fd, USBDEVFS_DISCARDURB, h->urb_out);
|
|
+ h->urb_in->status = -ENODEV;
|
|
+ h->urb_out->status = -ENODEV;
|
|
h->urb_in_busy = false;
|
|
h->urb_out_busy = false;
|
|
h->cv.notify_all();
|
|
} else {
|
|
@@ -519,8 +519,10 @@
|
|
g_usb_handles.remove(h);
|
|
|
|
D("-- usb close %p (fd = %d) --", h, h->fd);
|
|
|
|
+ delete h->urb_in;
|
|
+ delete h->urb_out;
|
|
delete h;
|
|
|
|
return 0;
|
|
}
|
|
@@ -572,8 +574,10 @@
|
|
usb->ep_in = ep_in;
|
|
usb->ep_out = ep_out;
|
|
usb->zero_mask = zero_mask;
|
|
usb->max_packet_size = max_packet_size;
|
|
+ usb->urb_in = new usbdevfs_urb;
|
|
+ usb->urb_out = new usbdevfs_urb;
|
|
|
|
// Initialize mark so we don't get garbage collected after the device scan.
|
|
usb->mark = true;
|
|
|