platform_system_core/adb
Yabin Cui 9b53e4c42c adb: fix adb usb operations on device.
Problem: For devices using /dev/usb-ffs/adb, Run
`while true; do adb reconnect device; sleep 1; done`. And the
device soon becomes offline. The adbd log shows that calling
adb_read(h->bulk_out) in usb_ffs_read() gets EOVERFLOW error.

Reason: When kicking a transport using usb-ffs, /dev/usb-ffs/adb/ep0
is not closed, and the device will not notify a usb connection reset
to host. So the host will continue to send unfinished packets even
if a new transport is started on device. The unfinished packets may
not have the same size as what is expected on device, so adbd on
device gets EOVERFLOW error. At the worst case, adbd has to create new
transports for each unfinished packet.

Fixes:
The direct fix is to make the usb connection reset when kicking transports,
as in https://android-review.googlesource.com/#/c/211267/1. And I think
we can make following improvements beside that.
1. Close a file that is used in other threads isn't safe. Because the file
descriptor may be reused to open other files, and other threads may operate
on the wrong file. So use dup2(dummy_fd) to replace close() in kick function,
and really close the file descriptor after the read/write threads exit.

2. Open new usb connection after usb_close() instead of after
usb_kick(). After usb_kick(), the transport may still exist and
reader/writer for the transport may be still running. But after
usb_close(), the previous transport is guaranteed to be destroyed.

Bug: 25935458
Change-Id: I1eff99662d1bf1cba66af7e7142f4c0c4d82c01b
(cherry picked from commit 005bf1e05b)
2016-04-26 17:43:14 -07:00
..
client adb: setsid() for adb host server. 2016-02-22 15:57:08 -08:00
daemon adbd: Remove check for set_supplementary_gids. 2016-01-08 10:56:20 -08:00
.clang-format adb: fix clang-format for access modifier dedent. 2016-02-22 15:57:08 -08:00
Android.mk Also archive adb.exe/fastboot.exe when building win_sdk. 2016-03-03 15:46:50 -08:00
CPPLINT.cfg Ignore whitespace/indent issues from cpplint. 2015-05-18 16:49:07 -07:00
MODULE_LICENSE_APACHE2 eclair snapshot 2009-11-12 18:46:23 -08:00
NOTICE eclair snapshot 2009-11-12 18:46:23 -08:00
OVERVIEW.TXT Fixing spelling errors in adb docs 2010-04-28 11:38:39 -04:00
SERVICES.TXT adb sync cleanup. 2015-08-24 11:15:01 -07:00
SYNC.TXT adb sync cleanup. 2015-08-24 11:15:01 -07:00
adb.cpp adb: add reconnect command. 2016-04-18 15:46:25 -07:00
adb.h adb: bump the server version to 36. 2016-04-18 15:46:25 -07:00
adb_auth.cpp Adb: use VLOG() to replace D() for verbose logging. 2015-09-23 12:53:38 -07:00
adb_auth.h Ignore ro.adb.secure in user builds. 2015-06-19 13:26:02 -07:00
adb_auth_client.cpp adb: fix mistaken use of PLOG. 2016-03-03 15:46:50 -08:00
adb_auth_host.cpp base: add SystemErrorCodeToString() function. 2016-02-01 12:18:26 -08:00
adb_client.cpp Merge changes Ia4a2ff77,I970806e3,I47daa338 into nyc-dev 2016-04-19 00:51:22 +00:00
adb_client.h adb: wait for adbd to die and respawn in root/unroot. 2016-03-04 19:15:11 -08:00
adb_io.cpp Increase the maximum shell command length to 4096ish. 2016-01-15 15:02:19 -08:00
adb_io.h adb: fix adb client running out of sockets on Windows 2015-10-30 16:23:10 -07:00
adb_io_test.cpp Track rename of base/ to android-base/. 2015-12-04 22:00:26 -08:00
adb_listeners.cpp Merge "Switch from using sockaddr to sockaddr_storage." 2015-12-08 01:41:38 +00:00
adb_listeners.h adb: win32: initial IPv6 support and improved Winsock error reporting 2015-07-30 23:07:55 -07:00
adb_trace.cpp Track rename of base/ to android-base/. 2015-12-04 22:00:26 -08:00
adb_trace.h Track rename of base/ to android-base/. 2015-12-04 22:00:26 -08:00
adb_utils.cpp adb: symlinks to dirs count as dirs for pull destination. 2016-03-03 15:46:50 -08:00
adb_utils.h adb: make ScopedFd universally accessible and useful. 2016-03-04 19:15:11 -08:00
adb_utils_test.cpp adb: mkdirs fixes 2016-02-22 15:57:08 -08:00
commandline.cpp Merge changes Ia4a2ff77,I970806e3,I47daa338 into nyc-dev 2016-04-19 00:51:22 +00:00
console.cpp Track rename of base/ to android-base/. 2015-12-04 22:00:26 -08:00
diagnose_usb.cpp Share the new adb USB diagnostic code with fastboot. 2015-12-14 10:50:21 -08:00
diagnose_usb.h Share the new adb USB diagnostic code with fastboot. 2015-12-14 10:50:21 -08:00
fdevent.cpp adb: make fdevent_test, socket_test compile on Windows. 2016-02-22 15:57:08 -08:00
fdevent.h adb: make fdevent_test, socket_test compile on Windows. 2016-02-22 15:57:08 -08:00
fdevent_test.cpp adb: make fdevent_test, socket_test compile on Windows. 2016-02-22 15:57:08 -08:00
fdevent_test.h adb: make fdevent_test, socket_test compile on Windows. 2016-02-22 15:57:08 -08:00
file_sync_client.cpp Implements 'adb bugreport <ZIP_FILE>'. 2016-04-13 09:21:23 -07:00
file_sync_service.cpp adbd: restore the old error handling behavior. 2016-02-22 15:57:09 -08:00
file_sync_service.h Implements 'adb bugreport <ZIP_FILE>'. 2016-04-13 09:21:23 -07:00
framebuffer_service.cpp Move adb to C++. 2015-03-09 14:06:11 -07:00
get_my_path_darwin.cpp Move get_my_path_darwin to C++. 2015-04-16 13:24:58 -07:00
get_my_path_linux.cpp Move adb to C++. 2015-03-09 14:06:11 -07:00
jdwp_service.cpp Switch from using sockaddr to sockaddr_storage. 2015-12-07 16:07:46 +09:00
line_printer.cpp Improve dumb terminal support (emacs is dumb). 2016-01-08 15:47:07 -08:00
line_printer.h Simplify adb LinePrinter newline handling. 2015-12-09 18:42:41 -08:00
mutex_list.h adb: add basename_lock to mutex_list.h. 2015-11-06 12:19:23 -08:00
protocol.txt Increase size of the the adb packets sent over the wire 2015-07-22 13:06:06 -07:00
remount_service.cpp adb: remove exit-time destructors. 2015-11-12 11:20:19 -08:00
remount_service.h Failure to find an oem partition should not be a remount failure. 2015-05-11 13:36:13 -07:00
security_log_tags.h ADB security logging 2016-01-21 15:57:02 +00:00
services.cpp Merge changes Ia4a2ff77,I970806e3,I47daa338 into nyc-dev 2016-04-19 00:51:22 +00:00
services.h adb: put legacy shell: service back in. 2015-09-30 15:40:09 -07:00
set_verity_enable_state_service.cpp adb: use libfec in disable-verity 2015-10-20 13:55:24 +01:00
shell_service.cpp adbd: fix spurious close of uninitialized fd. 2016-03-04 19:15:11 -08:00
shell_service.h Track rename of base/ to android-base/. 2015-12-04 22:00:26 -08:00
shell_service_protocol.cpp adb: create shell protocol class (take 2). 2015-09-08 10:04:10 -07:00
shell_service_protocol_test.cpp adb: fix shell_service_protocol_test for Windows. 2015-09-11 18:28:27 -07:00
shell_service_test.cpp adb: fix subprocess termination for legacy shell. 2016-01-27 17:13:41 -08:00
socket.h adb: relax serial matching rules. 2016-03-03 15:46:50 -08:00
socket_test.cpp adb: relax serial matching rules. 2016-03-03 15:46:50 -08:00
sockets.cpp adb: relax serial matching rules. 2016-03-03 15:46:50 -08:00
sockets.dia auto import from //depot/cupcake/@135843 2009-03-03 19:32:55 -08:00
sysdeps.h adb: make ScopedFd universally accessible and useful. 2016-03-04 19:15:11 -08:00
sysdeps_test.cpp adb: increase the FD table size on Win32. 2016-04-18 15:46:25 -07:00
sysdeps_unix.cpp adb: use TCP keepalive. 2016-03-03 15:42:11 -08:00
sysdeps_win32.cpp Merge changes Ia4a2ff77,I970806e3,I47daa338 into nyc-dev 2016-04-19 00:51:22 +00:00
sysdeps_win32_test.cpp adb: allow wine's output for sysdeps_win32 strerror test. 2016-02-22 15:57:08 -08:00
test_adb.py adb: fix adb client running out of sockets on Windows 2015-10-30 16:23:10 -07:00
test_device.py adb: clean up quotes in test_device.py. 2016-03-03 15:46:51 -08:00
test_track_devices.cpp Track rename of base/ to android-base/. 2015-12-04 22:00:26 -08:00
transport.cpp adb: use a custom thread to poll for usb devices on mac. 2016-04-26 17:00:49 -07:00
transport.h Fix kick_transport test. 2016-04-25 17:37:08 -07:00
transport_local.cpp Fix kick_transport test. 2016-04-25 17:37:08 -07:00
transport_test.cpp Fix kick_transport test. 2016-04-25 17:37:08 -07:00
transport_usb.cpp Fix kick_transport test. 2016-04-25 17:37:08 -07:00
usb_linux.cpp adb: make adb_thread_func_t return void, add adb_thread_exit. 2016-02-22 15:57:08 -08:00
usb_linux_client.cpp adb: fix adb usb operations on device. 2016-04-26 17:43:14 -07:00
usb_osx.cpp adb: use a custom thread to poll for usb devices on mac. 2016-04-26 17:00:49 -07:00
usb_windows.cpp adb: make adb_thread_func_t return void, add adb_thread_exit. 2016-02-22 15:57:08 -08:00