Loading adb/usb_linux_client.c +24 −19 Original line number Diff line number Diff line Loading @@ -264,6 +264,7 @@ static void init_functionfs(struct usb_handle *h) { ssize_t ret; if (h->control < 0) { // might have already done this before D("OPENING %s\n", USB_FFS_ADB_EP0); h->control = adb_open(USB_FFS_ADB_EP0, O_RDWR); if (h->control < 0) { Loading @@ -282,6 +283,7 @@ static void init_functionfs(struct usb_handle *h) D("[ %s: writing strings failed: errno=%d]\n", USB_FFS_ADB_EP0, errno); goto err; } } h->bulk_out = adb_open(USB_FFS_ADB_OUT, O_RDWR); if (h->bulk_out < 0) { Loading Loading @@ -320,14 +322,14 @@ static void *usb_ffs_open_thread(void *x) while (1) { // wait until the USB device needs opening adb_mutex_lock(&usb->lock); while (usb->control != -1) while (usb->control != -1 && usb->bulk_in != -1 && usb->bulk_out != -1) adb_cond_wait(&usb->notify, &usb->lock); adb_mutex_unlock(&usb->lock); while (1) { init_functionfs(usb); if (usb->control >= 0) if (usb->control >= 0 && usb->bulk_in >= 0 && usb->bulk_out >= 0) break; adb_sleep_ms(1000); Loading Loading @@ -424,10 +426,13 @@ static void usb_ffs_kick(usb_handle *h) D("[ kick: sink (fd=%d) clear halt failed (%d) ]", h->bulk_out, errno); adb_mutex_lock(&h->lock); adb_close(h->control); // don't close ep0 here, since we may not need to reinitialize it with // the same descriptors again. if however ep1/ep2 fail to re-open in // init_functionfs, only then would we close and open ep0 again. adb_close(h->bulk_out); adb_close(h->bulk_in); h->control = h->bulk_out = h->bulk_in = -1; h->bulk_out = h->bulk_in = -1; // notify usb_ffs_open_thread that we are disconnected adb_cond_signal(&h->notify); Loading Loading
adb/usb_linux_client.c +24 −19 Original line number Diff line number Diff line Loading @@ -264,6 +264,7 @@ static void init_functionfs(struct usb_handle *h) { ssize_t ret; if (h->control < 0) { // might have already done this before D("OPENING %s\n", USB_FFS_ADB_EP0); h->control = adb_open(USB_FFS_ADB_EP0, O_RDWR); if (h->control < 0) { Loading @@ -282,6 +283,7 @@ static void init_functionfs(struct usb_handle *h) D("[ %s: writing strings failed: errno=%d]\n", USB_FFS_ADB_EP0, errno); goto err; } } h->bulk_out = adb_open(USB_FFS_ADB_OUT, O_RDWR); if (h->bulk_out < 0) { Loading Loading @@ -320,14 +322,14 @@ static void *usb_ffs_open_thread(void *x) while (1) { // wait until the USB device needs opening adb_mutex_lock(&usb->lock); while (usb->control != -1) while (usb->control != -1 && usb->bulk_in != -1 && usb->bulk_out != -1) adb_cond_wait(&usb->notify, &usb->lock); adb_mutex_unlock(&usb->lock); while (1) { init_functionfs(usb); if (usb->control >= 0) if (usb->control >= 0 && usb->bulk_in >= 0 && usb->bulk_out >= 0) break; adb_sleep_ms(1000); Loading Loading @@ -424,10 +426,13 @@ static void usb_ffs_kick(usb_handle *h) D("[ kick: sink (fd=%d) clear halt failed (%d) ]", h->bulk_out, errno); adb_mutex_lock(&h->lock); adb_close(h->control); // don't close ep0 here, since we may not need to reinitialize it with // the same descriptors again. if however ep1/ep2 fail to re-open in // init_functionfs, only then would we close and open ep0 again. adb_close(h->bulk_out); adb_close(h->bulk_in); h->control = h->bulk_out = h->bulk_in = -1; h->bulk_out = h->bulk_in = -1; // notify usb_ffs_open_thread that we are disconnected adb_cond_signal(&h->notify); Loading