Merge "Fix adb flakiness on reboot"
diff --git a/adb/adb.h b/adb/adb.h
index 8064c17..faeab8d 100644
--- a/adb/adb.h
+++ b/adb/adb.h
@@ -139,8 +139,10 @@
int init_socket_transport(atransport *t, int s, int port, int local);
void init_usb_transport(atransport *t, usb_handle *usb, ConnectionState state);
+std::string getEmulatorSerialString(int console_port);
#if ADB_HOST
atransport* find_emulator_transport_by_adb_port(int adb_port);
+atransport* find_emulator_transport_by_console_port(int console_port);
#endif
int service_to_fd(const char* name, const atransport* transport);
diff --git a/adb/transport_local.cpp b/adb/transport_local.cpp
index a94b41e..ea2bf77 100644
--- a/adb/transport_local.cpp
+++ b/adb/transport_local.cpp
@@ -103,7 +103,8 @@
int fd = -1;
#if ADB_HOST
- if (find_emulator_transport_by_adb_port(adb_port) != nullptr) {
+ if (find_emulator_transport_by_adb_port(adb_port) != nullptr ||
+ find_emulator_transport_by_console_port(console_port) != nullptr) {
return -1;
}
@@ -120,7 +121,7 @@
D("client: connected on remote on fd %d", fd);
close_on_exec(fd);
disable_tcp_nagle(fd);
- std::string serial = android::base::StringPrintf("emulator-%d", console_port);
+ std::string serial = getEmulatorSerialString(console_port);
if (register_socket_transport(fd, serial.c_str(), adb_port, 1) == 0) {
return 0;
}
@@ -431,6 +432,11 @@
return NULL;
}
+std::string getEmulatorSerialString(int console_port)
+{
+ return android::base::StringPrintf("emulator-%d", console_port);
+}
+
atransport* find_emulator_transport_by_adb_port(int adb_port)
{
std::lock_guard<std::mutex> lock(local_transports_lock);
@@ -438,6 +444,12 @@
return result;
}
+atransport* find_emulator_transport_by_console_port(int console_port)
+{
+ return find_transport(getEmulatorSerialString(console_port).c_str());
+}
+
+
/* Only call this function if you already hold local_transports_lock. */
int get_available_local_transport_index_locked()
{