Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1c4b760a authored by Jack Ren's avatar Jack Ren
Browse files

adb: usb_windows: fix adb connection lost issue



Windows adb connection could be lost if the target
side kernel enables the kmemleak.

The root cause is that kmemleak downgrades USB
performance, and lead to Windows adb host application
timeout because usb_write()/usb_read()'s timeout time is
very short. That issue is not reproducible in Linux
host because its usb_write() timeout is 5s and usb_read()
is blocked until return:
                usb_write()         usb_read()
Linux           5000ms              blocked until return
Windows         500+len*8 ms        500+len*8 ms

To fix that issue, extend the Windows adb host usb_write
timeout time to 5 seconds and usb_read() as a blocked routine:
                usb_write()         usb_read()
Windows         5000ms              blocked until return

Change-Id: If54e2b4c396a5a06318c0ee0b3326a00e7661fbc
Signed-off-by: default avatarYu Wang <yu.y.wang@intel.com>
Signed-off-by: default avatarJin Can Zhuang <jin.can.zhuang@intel.com>
Signed-off-by: default avatarJack Ren <jack.ren@intel.com>
Signed-off-by: default avatarBruce Beare <bruce.j.beare@intel.com>
parent d98c87c9
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -255,7 +255,7 @@ usb_handle* do_usb_open(const wchar_t* interface_name) {
}

int usb_write(usb_handle* handle, const void* data, int len) {
  unsigned long time_out = 500 + len * 8;
  unsigned long time_out = 5000;
  unsigned long written = 0;
  int ret;

@@ -300,7 +300,7 @@ int usb_write(usb_handle* handle, const void* data, int len) {
}

int usb_read(usb_handle *handle, void* data, int len) {
  unsigned long time_out = 500 + len * 8;
  unsigned long time_out = 0;
  unsigned long read = 0;
  int ret;

@@ -322,7 +322,7 @@ int usb_read(usb_handle *handle, void* data, int len) {

        if (len == 0)
          return 0;
      } else if (saved_errno != ERROR_SEM_TIMEOUT) {
      } else {
        // assume ERROR_INVALID_HANDLE indicates we are disconnected
        if (saved_errno == ERROR_INVALID_HANDLE)
          usb_kick(handle);