• R/O
  • HTTP
  • SSH
  • HTTPS

提交

标签
No Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

system/core


Commit MetaInfo

修订版574645c708ddd7794de10588eaba08c956dec783 (tree)
时间2012-07-11 16:35:57
作者Jack Ren <jack.ren@inte...>
CommiterChih-Wei Huang

Log Message

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: Yu Wang <yu.y.wang@intel.com>
Signed-off-by: Jin Can Zhuang <jin.can.zhuang@intel.com>
Signed-off-by: Jack Ren <jack.ren@intel.com>
Signed-off-by: Bruce Beare <bruce.j.beare@intel.com>

更改概述

差异

--- a/adb/usb_windows.c
+++ b/adb/usb_windows.c
@@ -255,7 +255,7 @@ usb_handle* do_usb_open(const wchar_t* interface_name) {
255255 }
256256
257257 int usb_write(usb_handle* handle, const void* data, int len) {
258- unsigned long time_out = 500 + len * 8;
258+ unsigned long time_out = 5000;
259259 unsigned long written = 0;
260260 int ret;
261261
@@ -300,7 +300,7 @@ int usb_write(usb_handle* handle, const void* data, int len) {
300300 }
301301
302302 int usb_read(usb_handle *handle, void* data, int len) {
303- unsigned long time_out = 500 + len * 8;
303+ unsigned long time_out = 0;
304304 unsigned long read = 0;
305305 int ret;
306306
@@ -322,7 +322,7 @@ int usb_read(usb_handle *handle, void* data, int len) {
322322
323323 if (len == 0)
324324 return 0;
325- } else if (saved_errno != ERROR_SEM_TIMEOUT) {
325+ } else {
326326 // assume ERROR_INVALID_HANDLE indicates we are disconnected
327327 if (saved_errno == ERROR_INVALID_HANDLE)
328328 usb_kick(handle);