From 8c4076295ebd867d276636d673b9f8e6a8df01a6 Mon Sep 17 00:00:00 2001 From: Siqi Lin Date: Thu, 26 May 2016 13:04:52 -0700 Subject: [PATCH] Revert "adb: close ep0 on disconnection." This reverts commit 69e97e4bee9ee43ef55d1bb205bc4ca065d089bc. Bug: 28932120 Change-Id: I5e2569abed316c089886556c432bfe59bca08549 (cherry picked from commit 57de0514f0aeabe092ce3a122402721c93a70a2c) --- adb/usb_linux_client.cpp | 51 ++++++++++++++++++++-------------------- 1 file changed, 26 insertions(+), 25 deletions(-) diff --git a/adb/usb_linux_client.cpp b/adb/usb_linux_client.cpp index c10b48cae..0ba6b4bb2 100644 --- a/adb/usb_linux_client.cpp +++ b/adb/usb_linux_client.cpp @@ -400,33 +400,35 @@ static bool init_functionfs(struct usb_handle *h) v2_descriptor.os_header = os_desc_header; v2_descriptor.os_desc = os_desc_compat; - D("OPENING %s", USB_FFS_ADB_EP0); - h->control = adb_open(USB_FFS_ADB_EP0, O_RDWR); - if (h->control < 0) { - D("[ %s: cannot open control endpoint: errno=%d]", USB_FFS_ADB_EP0, errno); - goto err; - } - - ret = adb_write(h->control, &v2_descriptor, sizeof(v2_descriptor)); - if (ret < 0) { - v1_descriptor.header.magic = cpu_to_le32(FUNCTIONFS_DESCRIPTORS_MAGIC); - v1_descriptor.header.length = cpu_to_le32(sizeof(v1_descriptor)); - v1_descriptor.header.fs_count = 3; - v1_descriptor.header.hs_count = 3; - v1_descriptor.fs_descs = fs_descriptors; - v1_descriptor.hs_descs = hs_descriptors; - D("[ %s: Switching to V1_descriptor format errno=%d ]", USB_FFS_ADB_EP0, errno); - ret = adb_write(h->control, &v1_descriptor, sizeof(v1_descriptor)); - if (ret < 0) { - D("[ %s: write descriptors failed: errno=%d ]", USB_FFS_ADB_EP0, errno); + if (h->control < 0) { // might have already done this before + D("OPENING %s", USB_FFS_ADB_EP0); + h->control = adb_open(USB_FFS_ADB_EP0, O_RDWR); + if (h->control < 0) { + D("[ %s: cannot open control endpoint: errno=%d]", USB_FFS_ADB_EP0, errno); goto err; } - } - ret = adb_write(h->control, &strings, sizeof(strings)); - if (ret < 0) { - D("[ %s: writing strings failed: errno=%d]", USB_FFS_ADB_EP0, errno); - goto err; + ret = adb_write(h->control, &v2_descriptor, sizeof(v2_descriptor)); + if (ret < 0) { + v1_descriptor.header.magic = cpu_to_le32(FUNCTIONFS_DESCRIPTORS_MAGIC); + v1_descriptor.header.length = cpu_to_le32(sizeof(v1_descriptor)); + v1_descriptor.header.fs_count = 3; + v1_descriptor.header.hs_count = 3; + v1_descriptor.fs_descs = fs_descriptors; + v1_descriptor.hs_descs = hs_descriptors; + D("[ %s: Switching to V1_descriptor format errno=%d ]", USB_FFS_ADB_EP0, errno); + ret = adb_write(h->control, &v1_descriptor, sizeof(v1_descriptor)); + if (ret < 0) { + D("[ %s: write descriptors failed: errno=%d ]", USB_FFS_ADB_EP0, errno); + goto err; + } + } + + ret = adb_write(h->control, &strings, sizeof(strings)); + if (ret < 0) { + D("[ %s: writing strings failed: errno=%d]", USB_FFS_ADB_EP0, errno); + goto err; + } } h->bulk_out = adb_open(USB_FFS_ADB_OUT, O_RDWR); @@ -554,7 +556,6 @@ static void usb_ffs_close(usb_handle *h) { h->kicked = false; adb_close(h->bulk_out); adb_close(h->bulk_in); - adb_close(h->control); // Notify usb_adb_open_thread to open a new connection. adb_mutex_lock(&h->lock); h->open_new_connection = true;